用PHP检测,保存和输出UTF8

问题描述

|| 与许多其他PHP开发人员一样,我在字符编码方面遇到了问题,该问题将概述我要确保将数据保存并以UTF8输出的步骤。我想就我目前的想法还应该考虑和/或改变的任何建议。 我有一个MysqL数据库
DEFAULT CHaraCTER UTF-8
,我的表的排序规则为
utf8_general_ci
我正在使用PHP脚本从RSS提要中读取数据,然后将其保存到数据库中。在保存该数据之前,请执行以下操作以检查该数据是否为UTF-8:
protected function _convertToUTF8($content) {
    $enc = mb_detect_encoding($content);
    return mb_convert_encoding($content,\"UTF-8\",$enc);
}
当将此数据输出到网页时,我在PHP中设置标题
header(\"Content-type: text/html; charset=utf-8\");
并且我还将Content-Type元标记设置为utf-8
<Meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>
到目前为止,一切正常,我没有输出有趣的字符,并且一切都进行得很顺利,但是在处理此数据时我是否应该更改/考虑其他事项? 我现在遇到的问题是将数据输出到txt文件(csv),我正在使用fwrite()成功创建了该文件,但是我将此文件传递给的第三方称该文件不是UTF-8。我不确定数据是否以UTF-8格式输出,如何检查?当通过SSH登录到远程服务器时,当我处理文件时,我得到get5 get;当我减去文件时,得到
It<E2><80><99>s
。我在这里想念什么? 提前致谢!     

解决方法

        您无法检测到任何数据的编码。编码始终是数据本身旁边的元信息。 即使是
mb_detect_encoding()
也尝试这样做是最好的,但您永远也不要使用它来自动处理数据。由于无法从数据本身检测编码,因此此功能也无法实现。 不要依赖它。仅在需要调试问题或万不得已时才使用它进行手动检查,而在标准数据处理中则决不要使用。即使这样,也不要过于信任该信息。 我怎么说呢?只是一个例子:文本可以有效地用US-ASCII编码,并且UTF-8的检测例程将返回其是有效的UTF-8编码。那只是一个例子。事实是,这要复杂得多。 因此,理所当然的是您无法从原始数据中检测到编码。 而是查找指定编码的元信息。如果未提供编码信息,请在规范文档中查找默认编码以进行数据传输。 在从RSS提要中存储数据的情况下,请在响应标头和/或XML序言中查找信息。它通常包含文档的ISO表示法中的编码。 由于您的数据库需要将数据编码为UTF-8,因此您的处理必须注意,只有UTF-8数据才能放入数据库。因此,请检查并获取数据的编码,然后执行更改编码所需的步骤。但不要依靠ѭ8执行这些步骤。     ,        最后,是外部应用程序正确读取文件所必需的BOM。