我目前使用以下代码将字符串转换为seo友好的url:
function url($url) {
$url = str_replace(" ", " ", $url);
$url = str_replace(array("'", "-"), "", $url);
$url = mb_convert_case($url, MB_CASE_LOWER, "UTF-8");
$url = preg_replace("#[^a-zA-Z]+#", "-", $url);
$url = preg_replace("#(-){2,}#", "$1", $url);
$url = trim($url, "-");
return $url;
}
当我查询我的数据库我匹配url对文章标题在我的数据库,我的问题是,执行seo友好的url功能后,网址不匹配任何文章标题在我的数据库。
添加的破折号(不确定小写)意味着它们与数据库中的条目完全不同。
下一步是什么,我应该在查询数据库之前删除破折号,如果是这样,如何?
或者是更好的做法,包括文章id在我的url的某个地方,并引用它?
按id查询对我来说似乎比重新转换回标题更快更简单,使用url重写来忽略标题(只是为了引用)并调用带有id作为GET参数的页面。看看当前的URL,让我认为StackOverflow是这样工作的。
以当前页面为例,我怀疑
http://stackoverflow.com/questions/8034788/php-how-can-i-replace-dashes-with-spaces
被重写为
http://stackoverflow.com/questions.php?id=8034788