header("Content-type:text/html; charset=utf-8");
$space = "( )";
$test_string = str_replace(" ", " ", $space);
if($_POST["submit"] === "yes")
{
var_dump($space); echo md5($space);
echo"<br>";
var_dump($_POST["box1"]); echo md5($_POST["box1"]);
echo"<br>";
var_dump($test_string); echo md5($test_string);
echo"<br>";
}
$echo = "<form method='post'>".
"<input type='hidden' name='submit' value='yes'>".
"<textarea name='box1'>".$test_string."</textarea><input type='submit' value='SUBMIT'>".
"</form>";
echo"$echo";
如果我点击上面代码中的SUBMIT按钮,我将得到以下输出:
string(3) "( )" 847f697fc150ec24253d12927fe41b75
string(4) "( )" 63679d6d8c5ac6713be008a28ee19616
string(8) "( )" 742fcb328936485cdd13530f39c11bc6
将空格字符计算为单个字符并输出到string(3)
。
和
计算为6个字符并输出到string(8)
。
顺便说一下,从textarea发送的
计算为两个字符并输出到string(4)
。即使我将md5()
放在此值上,它也会打印一个与string(3)
不同的值。
起初,我认为这是一个编码问题,我已经删除了header()
部分,但问题仍然存在。
为什么会这样?
答案 0 :(得分:2)
env delete a_name
HTML实体由浏览器的HTML解析器解释,并转换为实际的U + 00A0 NO-BREAK SPACE Unicode字符。然后将其作为字节
发送到以UTF-8编码的服务器。一个字符,两个字节。
答案 1 :(得分:0)
无中断空格是非ASCII字符。某些Unicode实现可以为一个字符使用多个字节,允许它们使用比单字节仅ASCII更大的字符集。正在计算这些字节,因为NBSP的代码在UTF-8中是两个字符长。
当您将无休息空间的MD5哈希值与常规空间进行比较时,当然会得到不同的结果 - 它们不是同一个字符!
请在此处查看UTF-8编码,请注意有两个字符: https://en.wikipedia.org/wiki/Non-breaking_space#Encodings