【发布时间】:2011-04-20 17:39:35
【问题描述】:
我遇到了用户上传压缩文本文件的问题。提取文本内容后,我将它们导入 mysql 数据库。但是后来当我在浏览器中显示文本时,一些字符会出现乱码。我尝试对它们进行编码,但无法使用 PHP 检测文本文件的编码并使用 iconv 或 mbstring 转换为 UTF-8。
Mysql 数据库字符集是 UTF-8。
header('Content-type: text/html; charset=utf-8');
已添加。
试过了 iconv('UTF-8', 'UTF-8//IGNORE', $text_file_contents)
但它只是删除了乱码:当我使用 Firefox 浏览器手动检查时,它应该是 ' 或 "。Firefox 显示这是 ISO-8859-1 但我无法检查他们发送的每篇文章(文章可能是在不同的字符集中)。
如何将此字符转换为 UTF-8?
编辑: 这是我在 http://php.net/manual/en/function.mb-detect-encoding.php 最初由 prgss 在 bk dot ru 撰写。
函数 myutf8_detect_encoding($string, $default = 'UTF-8', $encode = 0, $encode_to = 'UTF-8') { 静态 $list = array('UTF-8', 'ISO-8859-1', 'ASCII', 'windows-1250', 'windows-1251', 'latin1', 'windows-1252', 'windows-1253 ','windows-1254','windows-1255','windows-1256','windows-1257','windows-1258','ISO-8859-2','ISO-8859-3','GBK '、'GB2312'、'GB18030'、'MACROMAN'、'ISO-8859-4'、'ISO-8859-5'、'ISO-8859-6'、'ISO-8859-7'、'ISO-8859 -8'、'ISO-8859-9'、'ISO-8859-10'、'ISO-8859-11'、'ISO-8859-12'、'ISO-8859-13'、'ISO-8859-14 ', 'ISO-8859-15', 'ISO-8859-16'); foreach ($list as $item) { $sample = iconv($item, $item, $string); if (md5($sample) == md5($string)) { 如果($编码 == 1) 返回 iconv($item, $encode_to, $string); 别的 返回$项目; } } 如果($编码 == 1) return iconv($encode_to, $encode_to . '//IGNORE', $string); 别的 返回$默认值; }在我的代码中我使用:
myutf8_detect_encoding(trim($description), 'UTF-8', 1)
但它仍然返回“old is gold”这个文本的乱码。
【问题讨论】:
标签: php