PHP将无意义的字符插入字符串

时间:2012-05-09 17:51:14

标签: php string encoding

我正在开发一个应用程序,我需要能够将一个字符串从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只是将字符串输出为十六进制,从而产生上面两个十六进制转储中的第一个。

1 个答案:

答案 0 :(得分:3)

这是UTF-8编码。

b0编码为c2 b0a7变为c2 a7da变为c3 9a7a未被更改。

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

Javascript似乎是UTF-8编码您的body变量。您可以尝试在PHP中使用utf8_decode function