http://localhost/foo/profile/%26lt%3Bi%26gt%3Bmarco%26lt%3B%2Fi%26gt%3B
上面的网址为我提供404 Error
,网址代码为:urlencode(htmlspecialchars($foo));
,与$foo
:<i>badhtml</i>
当没有可编码的内容时,网址正常工作,例如marco
。
感谢。 = d
更新:我应该捕获uri的编码部分中的片段,因此不应该出现404。
那里没有任何文档,marco
只是我需要从db获取该人的信息的字符串。如果用户不存在,则无论如何都不会抛出那个丑陋的错误。
轻微想法出了什么问题:我发现如果我使用<i>badhtml<i>
,它可以正常工作但<i>badhtml</i>
不会,我该怎么办才能使用/
维持<i>
中的http://localhost/foo/profile/<i>badhtml<**/**i>
?
它可能会将请求视为{{1}}
答案 0 :(得分:2)
由于参数中有斜杠/
,因此会将其解释为路径名称分隔符。
因此,解决方案是将所有出现的斜杠替换为不会被解释为分隔符的东西。 \u2044
或其他什么。在重新读取参数时,将所有\u2044
恢复为正常斜线。
(我选择了\u2044
,因为这个字符看起来非常像普通的斜杠,但是你可以使用参数中永远不会出现的anthing。)
答案 1 :(得分:1)
负责处理URL重写的正则表达式很可能不喜欢URL编码字符串中的某些字符。这很可能是httpd / apache问题,而不是PHP。最好的猜测是先查看.htaccess
(包含URL重写规则的文件)。
此问题假设您尝试通过URL传递参数,而不是访问名为<i>badhtml</i>
的文件。
答案 2 :(得分:-1)
先生。先生,你摇摇晃晃。
&#34;因此,解决方案是将所有出现的斜杠替换为不被解释为分隔符的东西。 \ u2044什么的。当重新读取参数时,将所有\ u2044s更改回正常斜线。&#34;