为什么 nbsp 在 URL 中不显示为 nbsp

Why doesn't nbsp display as nbsp in the URL

我正在学习一个用 PHP 编写的 Web 应用程序的教程,黑名单 space 来自输入('id' 参数)。任务是添加其他字符,这基本上绕过了这个黑名单,但仍然被后端的 MySQL 数据库解释。有效的是 URL 像这样构造 - http://192.168.2.15/sqli-labs/Less-26/?id=1'%A0||%A0'1

现在,我的问题很简单,如果“%A0”表示 NBSP,那么为什么当我访问像 http://www.url-encode-decode.com 这样的网站并尝试解码 URL 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'�||�'1.

我原以为看到的是空白 space,而不是黑框内的问号。

独立于编码错误的原因,尝试 %20 作为空格的替代品! 稍后您可以 str_replace 使用

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

可能是本站脚本运行不正常。如果您在 PHP 代码中使用它,它应该可以正常工作。

echo urldecode( '%A0' );

输出:

 

我怀疑这是由于字符编码不同造成的。

A0 表示 ISO-8859-1 encoding (and probably in other extended-ASCII encodings too). The page at http://www.url-encode-decode.com appears to use the UTF-8 编码中的 nbsp

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

表示

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