在PHP中导入带有亚洲字符的CSV

时间:2013-10-20 04:50:07

标签: php csv foreign-keys fgets fgetcsv

我正在尝试将带有泰语字符的CSV或Unicode文本导入MySQL。 MySQL保存泰语字符没有问题。问题是,当我使用fgetcsv或fgets时,我得到垃圾以换取泰国字符。例如,这些字符,ตู้เซฟเหล็ก成为9I @@ +%G。

我可以通过另一种方式阅读CSV文件吗?一个可以正确读取它们的函数吗?

1 个答案:

答案 0 :(得分:2)

函数fgets和fgetcsv使用系统区域设置来假设字符编码。在我看来,为此目的更改区域设置并不是一个明确的解决方案。还有另一种方式。你只能使用utf-8和explicity将unicode转换为utf-8:

示例代码(php> = 5.3):

<?php
//set internal encoding to utf8
mb_internal_encoding('utf8');

$fileContent = file_get_contents('thai_unicode.csv');

//convert content from unicode to utf
$fileContentUtf = mb_convert_encoding($fileContent, 'utf8', 'unicode');

echo "parse utf8 string:\n";
var_dump(str_getcsv($fileContentUtf, ';'));

结果是:

php load.php
parse utf8 string:
array(2) {
  [0]=>
  string(36) "ตู้เซฟเหล็ก"
  [1]=>
  string(1) "1"
}