我想将http://mysite.com/id255/
改为http://mysite.com/gora-beach-inn/
。
我的php看起来像:
$result = mysql_query("
SELECT id, header
FROM Article
");
while($data = mysql_fetch_assoc($result)){
mysql_query("
UPDATE Article
SET seo = '".MakeSeo($data['header'])."'
WHERE datum = '".$data['datum']."'
");
}
//Convert: "åäö" to "aao", "space" to "-", "!?" to "nothing", and all to lower case.
function MakeSeo($string)
{
???
}
请帮我使用MakeSoe功能。
我使用的是moderewrite,所以我只需要帮助来生成url,所以我可以将它们保存在我的数据库中。
答案 0 :(得分:5)
只是回答你的要求.. 你去吧..
function makeSeo($text, $limit=75)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if(strlen($text) > 70) {
$text = substr($text, 0, 70);
}
if (empty($text))
{
//return 'n-a';
return time();
}
return $text;
}
您可以添加更多过滤器来清理网址,也可以添加更多内容以使该网址独一无二。
注意:我并不是说将数据库添加到数据库是最好的方法。您可以使用其他技术实现相同类型的功能,例如mod_rewrite。
答案 1 :(得分:2)
您需要使用mod_rewrite来实现此目的,否则另一种方法是由php完成的“内部”方法,您可以在其中执行类似的操作:
http://mydomain.com/index.php/category/dogs
上面只是一个GET帖子,索引通过includes / mysql等处理内容加载;
答案 2 :(得分:0)
非正则表达式和更灵活的解决方案可以通过2个阵列完成。将中的所有字符从和定义为数组。省略的字符将被替换为 - 这是javascript函数的例子
function ToSeoFriendly(title) {
title = title.toLowerCase();
var generated = "";
var from = "ãàáäâẽèéëêìíïîõòóöôùúüûñçýčšžřľňäôabcdefghijklmnopqrstuvwxyz1234567890";
var to = "aaaaaeeeeeiiiiooooouuuuncycszrlnaoabcdefghijklmnopqrstuvwxyz1234567890-";
for (var i=0;i<title.length;i++){
generated += to.substr(from.indexOf(title.substr(i,1)),1);
}
return generated;
}