PHP 接收的 UTF-8 数据不会被解码


UTF-8 data received by php isn't decoded

我在处理 $_POST/$_REQUEST 美元数据时遇到了一些问题,它们似乎仍然utf8_encoded。

在以下情况下,我正在发送传统的 ajax 发布请求:

  • oXhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
  • 保存在UTF8-nobom格式下的JS文件
  • HTML 中的元标记<header>标记设置
  • PHP文件也保存在UTF-8-nobom格式
  • 使用了encodeURIComponent,但我尝试过没有,它给出了相同的结果

好的,所以一切都很好:数据库也在utf8中,并以这种方式接收它,页面显示良好。

但是当我收到字符"º"时,例如(通过$_REQUEST$_POST),它的二进制表示是11000010 10111010,而"º"在php(utf8...)中硬编码的二进制表示只10111010

跆拳道?只是不知道是不是好事...例如,如果我使用"#º#"作为explode php函数的分隔符,它不会被检测到,这实际上是导致我来到这里的问题。

任何帮助将一如既往地非常感谢,非常感谢您的时间。最好的 rgds。

编辑1:对照mb_check_encoding进行检查

if (mb_check_encoding($_REQUEST[$i], 'UTF-8')) {
    raise("$_REQUEST is encoded properly in utf8 at index " . $i);
} else {
    raise(false);
}

编码得到确认,我正确地提出了消息。

单字节 utf-8 字符没有设置位 7(八位),因此10111010不是 utf-8,您的文件可能以 ISO-8859-1 编码。