我在处理 $_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 编码。