2

我正在开发一个应用程序,我需要能够将字符串从 JavaScript 发送到 PHP。起初我只是通过$_POST变量发送它,但我注意到它正在将值插入到字符串中。

然后我重新编码了这两个部分以使用 base 64 来发送数据,因为我假设数据在传输中被破坏了。字符串传输得很好,没有错误,但是当我将它从 base 64 转换回 base 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简单地将字符串输出为十六进制,从而产生上面两个十六进制转储中的第一个。

4

1 回答 1

3

这是 UTF-8 编码。

b0被编码为c2 b0a7变成c2 a7. da变成c3 9a. 7a没有改变。

因此,您b0 a7 da 7a在 UTF-8 中表示为c2 b0 c2 a7 c3 9a 7a.

似乎 Javascript 对您的body变量进行了 UTF-8 编码。您可以尝试在 PHP 中使用utf8_decode 函数。

于 2012-05-09T18:06:36.880 回答