【发布时间】:2015-09-21 09:05:50
【问题描述】:
我正在尝试使用这样的 unicode 字符读取制表符分隔的电子表格:
$content = file_get_contents($filename);
当我在浏览器中打印时,文本会正确显示。还有一个标题:
header('Content-Type: text/html; charset=utf-8');
现在我想使用以下方法将内容分成几行:
$rows= explode("\n",$content);
当我打印一行时,现在 unicode 字符的内容是乱码:
echo $rows[1];
我的问题是:是什么导致了这种行为,我该怎么做才能将正确的文本放入 $row 数组?最后,我想将行值插入到数据库中,该数据库目前正在插入乱码。
感谢帮助
示例
explode() 之前的一行是这样的(注意:标签不显示在下面):
R002 Студия 2В 66 Богдан дорога Санкт-Петербург 3174 45 Андрей Смирнов маркетинг 234-56790 653-23685 dummy@dummy.com 34354547
爆炸后的一行是这样的:
R002 ! B C 4 8 O 2 66 > 3 4 0 = 4 > @ > 3 0 ! 0 = : B -¬ 5 B 5 @ 1 C @ 3 3174 45 = 4 @ 5 9 ! 2
编辑:子字符串也不起作用
我还注意到另一个奇怪的行为。当我这样做时
echo mb_substr($content,0,50,'utf-8');
输出只有25个字符,但字符显示正确
R002 Студия 2В 66 Богдан
但是,当我将偏移形式 0 更改为例如 5 时,它又是一团糟。
echo mb_substr($content,5,50,'utf-8');
输出是
02! B C 4 8 O 2 66 > 3 4 0 = 4 >
不确定这里发生了什么...可能是因为文件包含 utf-8 bom ("\xEF\xBB\xBF")?
【问题讨论】:
-
显示您的内容和预期输出
-
我现在添加了一个示例 :-)
-
你的预期输出是什么
-
嗨,预期的输出是,当我想打印基于换行符 (explode("\n",$content)) 展开的行 (echo $rows[1]) 时Unicode 字符与 $content 中显示的字符保持一致。最后每一行在验证后都会被插入到数据库中。