如何使用PHP代码SEO你的URL

SEO friendly

原文翻译自:The html blog

SEO是一个永恒的话题,今天我就发现了一篇关于如何使用PHP代码SEO你的URL的文章,其实内容很简单,最重要的也不需要确定你的空间提供商是否提供 mod_rewrite 模块,此文中提到:

大部分的教程都是关于如何使用 mod_rewrite 模块再配合.htaccess的内容达到SEO URL的效果,却很少人从动态的内容上优化URL。比如说,我现在从数据库提取出来一篇文章,那么改怎样把标题优化为URL?

再举个例子,我想把标题“Welcome to Beijing 2008 Olympic Games”优化为“welcome-to-beijing-2008-olympic-games”,甚至是把法语“Guantanamo: le chauffeur de Ben Laden plaide non coupable à l’ouverture de son procès”优化为”guantanamo-le-chauffeur-de-ben-laden-plaide-non-coupable-a-l-ouverture-de-son-proces.html”,转换后的字母除去了法语所有的特殊符号。

我把自己实现的方法共享出来,希望对大家有所帮助:

function friendlyURL($string){
$string = preg_replace("`\[.*\]`U","",$string);
$string = preg_replace('`&(amp;)?#?[a-z0-9]+;`i','-',$string);
$string = htmlentities($string, ENT_COMPAT, 'utf-8');
$string = preg_replace( "`&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);`i","\\1", $string );
$string = preg_replace( array("`[^a-z0-9]`i","`[-]+`") , "-", $string);
return strtolower(trim($string, '-'));
}

使用方法:

$myFriendlyURL = friendlyURL("Welcome to Beijing 2008 Olympic Games");
echo $myFriendlyURL;   // 将会输出“welcome-to-beijing-2008-olympic-games"

你可以转换任何的输入的字符串(当然这个是对于西方人说的,汉语肯定是不行的),对于法语的朋友,仅需要确保您的UTF-8编码即可,否则它将无法运行。

如果你使用的是 Smarty 模板,大家可以现在我做的一个小的插件,下载后解压放在Smarty/libs/plugins/文件夹下,使用方法:

{"Welcome to Beijing 2008 Olympic Games" | friendlyURL}
//或者设置变量
{$yourString | friendlyURL}

翻译到此结束,谢谢大家观看,翻译结束但下面还有话要说,说真的这个方法真的是非常的棒!也许有人会说可惜就是不支持中文,正好引出我要说的东西,我根据以上的代码以及生活点滴cosbeta所写的cos_slug_translator插件的核心代码修改了一番,现在支持了中文,但不仅仅是中文哦,根据Google translate的功能,可以自动识别输入的语言(我测试过简体中文,繁体中文,日文和韩语均通过测试)。
在线测试:Demo | Download

核心代码分两个部分,一个是上面的friendlyURL(),另外一个是translate(),translate()函数中有两个参数:字符串和翻译的语言种类,目前可以输入”chinese”和”japanese”,同样也可以忽略掉第二个参数,默认为空,直接为检测自动翻译:)

还有什么不明白的可以留言给我,我会尽力解答,希望对大家有所帮助。

update 1:那天糊涂了,错误连篇,十分感谢枫叶大哥的提醒- -!
update 2:为CodeIgniter做了一个Helper函数,有用到CI框架的可以使用下,下载的文件里包含样例(使用方法):下载SEO_URL4CI

8 thoughts on “如何使用PHP代码SEO你的URL

  1. @漫步 & 内存条
    这是我翻译的文章,不是我自己发明的…

    @枫叶
    已修正。
    那天被自己的项目搞糊涂了…神经错乱。
    幸好被枫叶大哥发现了:)