我正在开发一个应用程序,我需要能够将一个字符串从JavaScript发送到PHP。起初我刚刚通过$_POST
变量发送它,但我注意到它是在字符串中插入值。
然后我重新编码这两个部分以使用base 64来发送数据,因为我假设数据在传输中被破坏了。字符串被转移得很好没有错误,但是当我将它从基础64转换回基数16时,它有与以前完全相同的错误!
这是两个字符串(十六进制转储)的比较。每个字符串中有两个有意义的数据块,似乎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
只是将字符串输出为十六进制,从而产生上面两个十六进制转储中的第一个。
答案 0 :(得分:3)
这是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似乎是UTF-8编码您的body
变量。您可以尝试在PHP中使用utf8_decode function。