【发布时间】:2011-01-27 00:01:21
【问题描述】:
我在处理上传的文件时遇到了奇怪的编码问题。
我需要接受任何类型的文本文件,并且能够阅读其中的内容。尤其是从 Google 通讯录导出下载的文件时遇到问题。
我已经完成了通常的 utf8_encode/decode、mb_detect_encoding 等。总是像字符串是 UTF-8 一样返回,并尝试了许多 iconv 选项来尝试恢复编码,但没有成功。
test.php
header('Content-type: text/html; charset=UTF-8');
if ($stream = fopen($_FILES['list']['tmp_name'], 'r'))
{
$string = stream_get_contents($stream);
fclose($stream);
}
echo substr($string, 0, 50);
var_dump(substr($string, 0, 50));
echo base64_encode(serialize(substr($string, 0, 50)));
输出
��N�a�m�e�,�G�i�v�e�n� �N�a�m�e�,�A�d�d�i�t�i�o�n�
��N�a�m�e�,�G�i�v�e�n� �N�a�m�e�,�A�d�d�i�t�i�o�n�
czo1MDoi//5OAGEAbQBlACwARwBpAHYAZQBuACAATgBhAG0AZQAsAEEAZABkAGkAdABpAG8AbgAiOw==
【问题讨论】:
-
编码错误太模糊。我们需要一个例子。尝试在此处发布
base64_encode(serialize($excerpt))。 -
更新了示例摘录。
-
$string 从何而来?你能展示你用来获取它的代码吗?你用什么编码输出这个?
-
更新了 stream_get_contents。注意:我尝试了几种处理上传文件的方法,结果相同。如果我将上传的文本文件的内容复制到我的计算机上,然后上传一个具有相同内容的新文本文件,就可以了。我假设文件本身的文件编码是非 UTF-8 开头的。
标签: php utf-8 character-encoding