【发布时间】:2011-06-13 22:28:53
【问题描述】:
与许多其他 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() 已成功创建文件,但我传递此文件的第 3 方说该文件不是 UTF- 8. 我不确定数据是否以 UTF-8 输出,我该如何检查?当通过 SSH 登录到远程服务器并且我 cat 文件时,我得到 Itâs a,当我 vim 文件时,我得到 Itâ~@~Ys,当我减少文件时,我得到 It<E2><80><99>s。 我在这里错过了什么?
提前致谢!
【问题讨论】:
-
它抱怨的文件中可能有 BOM 吗?或者它可能需要文件中的 BOM?我知道我之前遇到过这个问题(不是在这个特定的应用程序中),我不得不在没有 BOM 的情况下重新保存一个文件(在 utf-8 中)才能让它正常工作。
-
是的,但希望我已经解释清楚并得到一个很好的答案,这将有助于未来的人们,因为发布的问题很模糊,通常与输出有关,而不是保存数据。
-
例如,请参阅这篇关于编辑器在没有 BOM 的情况下无法将文件正确解释为 utf-8 的帖子:stackoverflow.com/questions/2558172/…
-
这个问题是在询问关于整个过程的观点和事实,而不是个别错误。
-
您在我的回答中对此有一个众所周知的看法,并且对整个过程有一个非常一般的提示;)
标签: php utf-8 character-encoding fwrite multibyte-functions