PHP str_getcsv() 如果包含日语字符,则无法正确解析 CSV
PHP str_getcsv() does not parse CSV correctly if it contains Japanese character
我正在尝试使用 file() 函数将 excel 文件转换为数组。一些字段包含日文字符。对于那些字段,我没有得到正确的数据。
这是我的代码行
$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。
我正在尝试使用 file() 函数将 excel 文件转换为数组。一些字段包含日文字符。对于那些字段,我没有得到正确的数据。
这是我的代码行
$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。