使用PHP fgetcsv(字符集问题)无法正确呈现字符数据

时间:2014-01-15 14:12:05

标签: php csv fgetcsv

File csv

Page with results

代码:

<?php
$file_name = 'test.csv';

if (($handle_f = fopen($file_name, "r")) !== FALSE)
{

while ( ($data_f = fgetcsv($handle_f, 20000, ";"))!== FALSE) {
echo Name - '.$data_f[0].', City - '.$data_f[1].', Adress - '.$data_f[2].', Site - '.$data_f[3].'<br>';
}

fclose($handle_f);
} else {$err = 1; echo "File not open";}
?>

例如,在结果中我会得到下一个(例如前两行):

Name - Сибвез, City - Абакан, Adress - ул. Советская, 44, Site - www.sibvez.ru
Name - Быттехника, City - Абакан, Adress - ул. Дружбы народов, д. 52, Site - www.sibvez.ru

但现在结果排在第2行:

Name - , City - , Adress - . Советская, 44, Site - www.sibvez.ru
Name - , City - , Adress - . Дружбы народов, д. 52, Site - http://www.bytech.ru

请告诉我为什么我无法得到正确的结果?

2 个答案:

答案 0 :(得分:1)

您需要设置正确的区域设置 - 使用setlocale(LC_ALL, 'ru_RU.CP1251');

完整代码:

setlocale(LC_ALL, 'ru_RU.CP1251');
echo strtoupper('SERVER USE LOCALE ru_RU.CP1251');

$file_name = 'test.csv';

if (($handle_f = fopen($file_name, "r")) !== FALSE)
{

while ( ($data_f = fgetcsv($handle_f, 20000, ";"))!== FALSE) {
echo 'Name - '.$data_f[0].', City - '.$data_f[1].', Adress - '.$data_f[2].', Site - '.$data_f[3].'<br>';
}

fclose($handle_f);
} else {$err = 1; echo "File not open";}

setlocale参考:http://us2.php.net/manual/en/function.setlocale.php

答案 1 :(得分:0)

这里似乎存在语法错误:

while ( ($data_f = fgetcsv($handle_f, 20000, ";"))!== FALSE) {
echo Name - '.$data_f[0].', City - '.$data_f[1].', Adress - '.$data_f[2].', Site -        '.$data_f[3].'<br>';
}

应该是:

while ( ($data_f = fgetcsv($handle_f, 20000, ";"))!== FALSE) {
echo 'Name - '.$data_f[0].', City - '.$data_f[1].', Adress - '.$data_f[2].', Site -        '.$data_f[3].'<br>';
}
相关问题