4
http://localhost/foo/profile/%26lt%3Bi%26gt%3Bmarco%26lt%3B%2Fi%26gt%3B

上面的网址给了我一个404 Error,网址代码是这样urlencode(htmlspecialchars($foo));的:,至于$foo<i>badhtml</i>

当没有任何东西可以编码时,该 url 可以正常工作,例如marco.

谢谢。=D

更新:我应该在 uri 的编码部分捕获片段,因此不应该出现 404。

那里没有任何文档,marco只是我需要从 db 获取该人信息的字符串。如果用户不存在,它无论如何都不会抛出那个丑陋的错误。

有点想法出了什么问题:我发现如果我使用<i>badhtml<i>它,它工作得很好但<i>badhtml</i>不会,我该怎么做才能/保持<i>

它可能将请求视为http://localhost/foo/profile/<i>badhtml<**/**i>

4

3 回答 3

2

由于参数中有一个斜杠/,这被解释为路径名分隔符。

因此,解决方案是将所有出现的斜杠替换为不会被解释为分隔符的东西。\u2044或者其他的东西。并且在重新读取参数时,将所有\u2044s 改回正常的斜杠。

(我选择\u2044这个字符是因为这个字符看起来非常像一个普通的斜线,但是你可以使用参数中永远不会出现的东西,当然。)

于 2012-06-20T09:52:08.780 回答
1

负责处理 URL 重写的正则表达式很可能不喜欢 URL 编码字符串中的某些字符。这很可能是 httpd/apache 问题,而不是 PHP。您最好的猜测是从查看.htaccess(包含 URL 重写规则的文件)开始。

此问题假定您正在尝试通过 URL 传递参数,而不是访问名为<i>badhtml</i>.

于 2012-06-20T09:28:12.690 回答
-1

李斯特先生,你震撼了。

“因此,解决方案是用不会被解释为分隔符的东西替换所有出现的斜线。\u2044 或其他东西。当读回参数时,将所有 \u2044 改回正常的斜线。”

于 2014-09-04T14:35:40.453 回答