我正在开发一个应用程序,我需要能够将字符串从 JavaScript 发送到 PHP。起初我只是通过 $_POST
变量发送它,但我注意到它正在将值插入到字符串中。
然后我对这两个部分进行了重新编码,以使用 Base 64 来发送数据,因为我假设数据在传输过程中被破坏了。字符串传输得很好,没有错误,但是当我将它从 64 进制转换回 16 进制时,它出现了与之前完全相同的错误!
这是两个字符串的比较(十六进制转储)。每个字符串中有两个有意义的数据 block ,PHP 似乎只在这些区域附近犯错误。第一行是 PHP 如何解释字符串,第二行是我如何从 JavaScript 发送字符串。
c2 b0 c2 a7 c3 9a 7a 00 00 00 c2 bb 30 4d 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
b0 a7 da 7a 00 00 00 00 00 00 bb 30 4d 61 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
为什么会出现这些幻象字节?
编辑:这是我正在使用的代码。
JavaScript:
function sendRequest(body)
{
var url = "../update/index.php";
$.post(url,{msg:body},function(data,status,jqx)
{
$("#response").html(data);
});
}
body
是一个字符串,其开头硬编码为 "\u00b0\u00a7\u00da\u007a"
。
然后在 PHP 中:
$msg =$_POST['msg'];
plain_hex_dump($msg);
plain_hex_dump
只是将字符串输出为十六进制,从而生成上面两个十六进制转储中的第一个。
最佳答案
这是UTF-8编码。
b0
编码为 c2 b0
。 a7
变为 c2 a7
。 da
变为 c3 9a
。 7a
未更改。
因此,您的 b0 a7 da 7a
在 UTF-8 中表示为 c2 b0 c2 a7 c3 9a 7a
。
Javascript 似乎对您的 body
变量进行 UTF-8 编码。您可以尝试使用 utf8_decode function在 PHP 中。
关于PHP在字符串中插入无意义的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10521430/