如果CSV包含日语字符,则PHP str_getcsv()无法正确解析CSV
我正在尝试使用file()函数将excel文件转换为数组。某些字段包含日文字符。对于这些字段,我没有得到正确的数据 这是我的代码行如果CSV包含日语字符,则PHP str_getcsv()无法正确解析CSV,php,csv,parsing,cjk,fgetcsv,Php,Csv,Parsing,Cjk,Fgetcsv,我正在尝试使用file()函数将excel文件转换为数组。某些字段包含日文字符。对于这些字段,我没有得到正确的数据 这是我的代码行 $data = array_map('str_getcsv', file($path)); 我只能猜测没有细节,比如输入的日语字母是如何被错误转换的 str_getcsv()可以看到系统区域设置,因此设置日语区域设置可能会解决此问题 此代码 setlocale(LC_ALL, 'ja_JP'); $data = array_map('str_getcsv', fi
$data = array_map('str_getcsv', file($path));
我只能猜测没有细节,比如输入的日语字母是如何被错误转换的 str_getcsv()可以看到系统区域设置,因此设置日语区域设置可能会解决此问题 此代码
setlocale(LC_ALL, 'ja_JP');
$data = array_map('str_getcsv', file('japanese.csv'));
var_dump($data);
在我的本地计算机上使用以下CSV文件(japanese.CSV,保存在UTF-8中)
日本語,テスト,ファイル
2行目,CSV形式,エンコードUTF-8
结果是
array(2) {
[0]=>
array(3) {
[0]=>
string(9) "日本語"
[1]=>
string(9) "テスト"
[2]=>
string(12) "ファイル"
}
[1]=>
array(3) {
[0]=>
string(7) "2行目"
[1]=>
string(9) "CSV形式"
[2]=>
string(20) "エンコードUTF-8"
}
}
如您所见,str_getcsv()要求您知道输入CSV文件中使用的是哪种语言。这一次,您可以确保输入始终是日语,但如果CSV的语言不可预测,则无法对其进行解析。另外,如果您的代码在不同的环境中使用,您还需要注意,定向区域设置可能会丢失。我已经通过使用
mb_convert_encoding($csv_data[$i][2],"UTF-8", "SJIS");
这将把所有Shift JIS编码的字符转换为UTF-8。您需要指定字符集头,与该文件中的编码相同。请给我举个例子,看看您的文件编码是否为UTF-8。我正在从外部导入csv或excel文件,如何将UTF-8添加到该文件中。请你解释一下好吗。这是我的代码:$path=$request->file('import_file')->getRealPath()$数据=数组映射('str_getcsv',文件($path));为什么你认为你得到了错误的数据?