.htaccess和url中的双引号

时间:2012-10-12 18:00:00

标签: php

由于引号我点击超链接时出现404错误。 MySQL列title具有此值the official "i'm hungry" page

$title = str_replace(' ','-',$row['title']);
<a href='/page/$id/$title'>click me</a>

这是没有modrewrite http://localhost/page.php&id=7&p=the-official-"i'm-hungry"-page

的网址

modrewrite将网址更改为http://localhost/page/7/the-official-"i'm-hungry"-page,但链接无效。

以下是重写规则RewriteRule ^page/([A-Za-z0-9-]+)/([A-Za-z0-9-]+)?/?$ /page.php?id=$1&p=$2 [L]

我如何解决此问题,所以我没有收到404错误?

2 个答案:

答案 0 :(得分:1)

通常,您希望按照ID标识您的网页,而不是标题。客户端总是会尝试将奇怪的字符添加到页面标题中,例如"/'&。这些字符可能会破坏链接。

http://example.com/page/1234/the+official+ “我饿+”/ “我+渴” +页

此重写规则应收集页面的ID,然后将其他任何内容添加为第二个变量:

RewriteRule ^page/([0-9]+)/(.*)$ /page.php?id=$1&p=$2 [L]

如果你这样做,那么标题就变得简洁了,你可以添加更严格的过滤器来防止意外行为(例如,如果用户创建并命名为the official "i'm hungry"/"i'm thirsty" page页面,你可以将其转换为{{1在URL中不影响您网页的内容。

例如,这两个链接都会将您带到同一个地方:

the-official-i-m-hungry-i-m-thirsy-page

如果要强制用户访问具有正确标题的页面,则可以更新http://stackoverflow.com/questions/12864634/htaccess-and-double-quotations-in-url http://stackoverflow.com/questions/12864634/gibberishgibberishgibberish 以从URL中获取ID,然后将用户重定向到正确的,美观上合适的URL。例如:

page.php

但是,只要您按网页ID而不是名称加载内容,即使网址不正确,也应该正常工作。

答案 1 :(得分:0)

使用str_replace代替您使用的preg_replace代替$title中的字母和数字,并将其替换为-