2012-06-19 47 views
0

我正在使用mod_rewrite,并使用页面标题例如关于我们已在内容管理系统,而不是index.php文件中输入?页= 1在网址中,有什么更好的替代空间,+或破折号? url encode does +,谷歌推荐破折号

所以我有一个规则

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

这将好看的URL www.domain.com /pages/About-Us.php并发送请求到www.domain.com/index.php?page=About-Us

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

我想使用About-U s.php版本,我如何获得URL编码来处理我的空间与 - 而不是+?

丰富:)

回答

3

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

另一方面,虚线不是特殊字符,并直接在URL中表示自己。

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

大多数CMS通过将标题转换为小写字母并用破折号替换空格和标点符号,在创建时为每个页面自动创建一个slu slu。理想情况下,这个slug应该是数据库中的一个实际字段,以便在需要时可以手动覆盖它。当你生成你的页面的链接时,你可以在URL中包含它们的内容,当你得到一个页面的请求时,你可以用数据库而不是标题在数据库中查看它。

+0

以及它是我自己的CMS,并且用户输入了关于我们和特别优惠这样的页面标题,这是数据库中的内容。所以当我编写导航栏的时候,我应该做一些preg_replace或者其他的东西并且把空间换成短划线? – Rich

+0

对,我明白了。说得通。谢谢@lanzz – Rich