【发布时间】:2016-02-22 09:03:44
【问题描述】:
我正在尝试编写用于导入 CSV 文件的 PHP 脚本。
我正在使用此代码:
<form method="post" enctype="multipart/form-data">
<input type="file" name="f"><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
$row = 1;
if (($handle = fopen($_FILES['f']['tmp_name'], "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$data = array_map("utf8_encode", $data); //added
$num = count($data);
// Row
$row++;
for ($c=0; $c < $num; $c++) {
// Column
echo $data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>
脚本有效,但问题在于编码字符。在 CSV 文件中,内容是拉脱维亚语,并且显示的拉脱维亚语字符不正确。
一些拉脱维亚文本示例:
Šis ir septītais kāzu fotokonkurss Latvijā, turklāt, pēc iesūtīto 照片 skaita tas ir arī lielākais visā Baltijā。沙迦 fotokonkursā piedalījās 90 autori, kuri iesūtīja kopumā 1106 照片。 Fotokonkursa apbalvošanas laikā tiks nominēti labākie 拉脱维亚 kāzu fotogrāfi 10 类别分类: gatavošanās, ceremonija, emocijas, bērni, portrets, jaunais paris, detaļas, svinības, izšķirošais mirklis un gaismas spēles。
这就是我从脚本中收到的:
Ðis ir septîtais kâzu fotokonkurss Latvijâ turklât pçc iesûtîto fotogrâfiju skaita tas ir arîlielâkais visâ Baltijâ。达佳 fotokonkursâ piedalîjâs 90 autori kuri iesûtîja kopumâ 1106 照片。 Fotokonkursa apbalvoðanas laikâ tiks nominçti labâkie 拉脱维亚 kâzu fotogrâfi 10 daþâdâs kategorijâs: gatavoðanâs, ceremonija, emocijas, bçrni, portrets, jaunais pâris, detaïas, svinîbas, izðíiroðais mirklis un gaismas spçles。
当我简单地做echo 'Some latvian text'; 时,它工作得很好。所以问题出在 csv 处理程序上。
据我所知,我需要在 BOM 中使用 UTF8。但是我该怎么做呢?
【问题讨论】:
-
您可以使用类似github.com/neitanod/forceutf8 的方式先删除 BOM,然后再导入。
-
你为什么使用
utf8_encode?你试过没有它吗?输入文件的编码是什么?如果您不确定,请在文本编辑器中打开它,该编辑器允许您以不同的编码打开文件,并尝试使用不同的编码打开它,直到找到正确解释文件的编码。 -
如果我不使用
utf8_encode,我将收到问题符号而不是字母,例如:R��ina。我正在通过 Excel 保存 CSV 文件。还尝试使用 Notepad++ 创建文件,将字符集设置为 UTF8,使用 bom 设置 UTF8,没有任何帮助。