Urlencode正斜杠404错误

时间:2012-06-20 09:23:51

标签: php

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}}

3 个答案:

答案 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;