PHP在字符串中插入无意义的字符

标签 php string encoding

我正在开发一个应用程序,我需要能够将字符串从 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 b0a7 变为 c2 a7da 变为 c3 9a7a 未更改。

因此,您的 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/

相关文章:

php - SQL注入(inject)mysql_real_escape_string

php - 在这种情况下如何转义引号?

javascript - 为什么 innerHTML 无法通过 AJAX 处理响应文本中的 Html 元素?

php - 我在 postgresql 中的表正在截断这些字符串

c++ - 将字符串的 UNIX 行结尾转换为 DOS 行结尾

PHP PayPal 支付验证/HTTP POST?

c - C 中使用运算符进行字符串比较

javascript - 以字符串形式检索原始 html 实体(十进制)值

encoding - 为什么会有不同的编码类型?

perl - 如何检测latin1和UTF-8?