使用PHP进行SEO的Slugs - 将名称附加到URL的末尾

时间:2013-10-30 15:30:04

标签: php redirect url-rewriting preg-replace preg-match-all

我在StackOverflow网站上发现了一些事情:

如果您在StackOverflow.com上访问问题的网址:

  

"https://stackoverflow.com/questions/10721603"

网站将问题的名称添加到网址末尾,因此会变为:

  

"https://stackoverflow.com/questions/10721603/grid-background-image-using-imagebrush"

这很好,我知道这会使URL更有意义,并且可能是SEO的一种技术。

在StackOverflow上看到此实现后我想要实现的目标

我希望在我的网站上实现同样的功能。我很高兴使用header() 301重定向来实现这一目标,但我试图想出一个可以解决问题的紧凑脚本。

我的代码到目前为止

Please see it working by clicking here

// Set the title of the page article (This could be from the database).  Trimming any spaces either side
$original_name = trim(' How to get file creation & modification date/times in Python with-dash?');

// Replace any characters that are not A-Za-z0-9 or a dash with a space
$replace_strange_characters = preg_replace('/[^\da-z-]/i', " ", $original_name);

// Replace any spaces (or multiple spaces) with a single dash to make it URL friendly
$replace_spaces = preg_replace("/([ ]{1,})/", "-", $replace_strange_characters);

// Remove any trailing slashes
$removed_dashes = preg_replace("/^([\-]{0,})|([\-]{2,})|([\-]{0,})$/", "", $replace_spaces);

// Show the finished name on the screen
print_r($removed_dashes);

问题

我已经创建了这个代码,它可以通过外观很好地工作,它使字符串URL友好且易于人眼阅读。但是,我想看看是否有可能简化或“收紧”......因为我觉得我的代码可能过于复杂。

我希望它放在一条线上并不是那么多,因为我可以通过将功能嵌套到另一条线来做到这一点,但我觉得可能有一种更简单的方法来实现它 - 我正在寻找想法

总之,代码实现了以下目标:

  • 删除所有“奇怪”字符并用空格替换
  • 使用短划线替换任何空格以使其符合网址
  • 返回不带任何空格的字符串,单词用短划线分隔,没有尾随空格或短划线
  • 字符串是可读的(不包含百分号和+符号,例如简单地使用urlencode()

感谢您的帮助!

潜在解决方案

我在写这篇文章时发现,我正在寻找所谓的URL'slug',它们确实对SEO很有用。

{p> I found this library on Google code appears to work well in the first instance

SO which can be found here上还有一个值得注意的问题,其中有其他例子。

2 个答案:

答案 0 :(得分:1)

我试着像你一样玩preg。然而,当你开始看外语时,它变得越来越复杂。 我最终做的只是修剪标题,并使用urlencode

$url_slug = urlencode($title);

我还必须添加:

$title = str_replace('/','',$title); //Apache doesn't like this character even encoded
$title = str_replace('\\','',$title); //Apache doesn't like this character even encoded

还有第三方库,例如:http://cubiq.org/the-perfect-php-clean-url-generator

答案 1 :(得分:0)

确实,你可以这样做:

$original_name = ' How to get file creation & modification date/times in Python with-dash?';

$result = preg_replace('~[^a-z0-9]++~i', '-', $original_name);
$result = trim($result, '-');

要处理其他字母,您可以使用此模式:

~\P{Xan}++~u

~[^\pL\pN]++~u