在url中,用什么更好地替换空格,+或短划线? url编码做+,谷歌推荐破折号

时间:2012-06-19 10:29:42

标签: php mysql apache

我正在使用mod_rewrite,并使用页面标题,例如关于我们已经在内容管理系统中输入而不是index.php?page = 1

所以我有一条规则

RewriteRule     ^pages/([A-Za-z0-9\-]+).php?$   index.php?page=$1                   [NC,L]  # Handle site navigation

这将是一个很好的网址www.domain.com/pages/About-Us.php并将请求发送到www.domain.com/index.php?page=About-Us

然而,url编码为空格添加了一个加号,所以如果我查询About-Us它显然不起作用,因为我应该查询的是domain.com/About+Us.php

我想使用About-Us.php版本,如何使用url编码来处理我的空格 - 而不是+?

Rich:)

1 个答案:

答案 0 :(得分:4)

urlencode()仅用于查询参数(?之后的所有内容)。 +是URL查询部分中的特殊字符,表示文字空间;文字+字符需要进行百分比编码。 rawurlencode()适用于所有其他网址部分,并且不会将空间编码为+

另一方面,破折号不是特殊字符,而是直接在URL中表示。

您尚未指定正在使用的CMS,或者它是您自己的内部解决方案,但您要做的是在URL中使用slugs而不是实际的页面标题。

大多数CMS在创建时会自动为每个页面创建一个slug,方法是将title转换为小写,并用短划线替换空格和标点符号。理想情况下,此slug应该是数据库中的实际字段,以便在需要时可以手动覆盖它。当您生成指向页面的链接时,您可以在URL中包含它们的slug,当您收到页面请求时,您可以通过slug而不是标题在数据库中查找它。