为什么不在网址中显示为nbsp

时间:2015-07-01 11:20:00

标签: html urlencode urldecode

我正在学习一个用PHP编写的Web应用程序的教程,将输入中的空格列为黑名单('id'参数)。任务是添加其他字符,这些字符基本上绕过了这个黑名单,但仍然被后端的MySQL数据库解释。有效的是这样构建的URL - <?php if(isset($_SESSION['div_loading']) echo $_SESSION['div_loading']; else echo 1;

现在,我的问题很简单,如果'%A0'表示NBSP,那么为什么当我访问http://www.url-encode-decode.com这样的网站并尝试解码网址http://192.168.2.15/sqli-labs/Less-26/?id=1'%A0||%A0'1时呢?被解码为http://192.168.2.15/sqli-labs/Less-26/?id=1'%A0||%A0'1

而不是黑盒子里面的问号,我期待看到一个空白区域。

3 个答案:

答案 0 :(得分:1)

我怀疑这是由于字符编码之间的差异造成的。

A0代表ISO-8859-1编码中的nbsp(也可能代表其他扩展ASCII编码)。 http://www.url-encode-decode.com处的页面似乎使用UTF-8编码。

您的问题是UTF-8中没有A0代表的字符。 UTF-8中的等效nbsp字符将由值C2A0表示。

解码http://192.168.2.15/sqli-labs/Less-26/?id=1'%C2%A0||%C2%A0'1将生成您期望的nbsp个字符。

答案 1 :(得分:0)

独立于编码错误的原因,请尝试%20 替换空白! 稍后您可以使用

str_replace空格
echo str_replace(" ", "&nbsp;", $_GET["id"]);

答案 2 :(得分:0)

这个网站上的脚本可能无法正常运行。如果您在PHP代码中使用它,它应该可以正常工作。

echo urldecode( '%A0' );

输出:

&nbsp;

相关问题