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";
如果我点击上面代码中的“提交”按钮,我将得到以下输出:
string(3) "( )" 847f697fc150ec24253d12927fe41b75
string(4) "( )" 63679d6d8c5ac6713be008a28ee19616
string(8) "( )" 742fcb328936485cdd13530f39c11bc6
空白字符被计算为单个字符并输出到string(3)
。
和
计算为6个字符并输出到string(8)
。
顺便说一句,从textarea发送的
被计算为两个字符并输出到string(4)
。即使我将 md5()
放在该值上,它也会打印出与 string(3)
情况不同的值。
一开始我以为是编码问题,我把header()
部分删掉了,但问题还是出现。
为什么会发生这种情况?
最佳答案
HTML 实体由浏览器的 HTML 解析器解释并转换为实际的 U+00A0 NO-BREAK SPACE Unicode 字符。然后将其发送到以 UTF-8 编码为字节 C2 A0
的服务器。一个字符,两个字节。
关于php - 为什么从 textarea 发送的内容被算作两个字母?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45066412/