Fgetcsv can't read Chinese
SetLocale (Lc_all, ' ZH_CN ') has been set, but sometimes it is not possible to read the Chinese in the CSV file, why? It seems to be related to the system system!
------Solution--------------------
Document encoding and system coding are the same, iconv the document encoding into the system code.
------Solution--------------------
Fgetcsv has a bug.
Use this function.
Function _fgetcsv (& $handle, $length = null, $d = ', ', $e = ' "') {
$d = Preg_quote ($d);
$e = Preg_quote ($e);
$_line = "";
$eof =false;
while ($eof! = True) {
$_line. = (Empty ($length)? Fgets ($handle): Fgets ($handle, $length));
$itemcnt = Preg_match_all ('/'. $e. '/', $_line, $dummy);
if ($itemcnt% 2 = = 0)
$eof = true;
}
$_csv_line = Preg_replace ('/(?:
------Solution--------------------
[])? $/', $d, Trim ($_line));
$_csv_pattern = '/('. $e. ' [^ '. $e. ']* (?: '. $e. $e. ' [^ '. $e. ']*)*' . $e. '
------Solution--------------------
[^ '. $d. ']*)' . $d. '/';
Preg_match_all ($_csv_pattern, $_csv_line, $_csv_matches);
$_csv_data = $_csv_matches[1];
for ($_csv_i = 0; $_csv_i < count ($_csv_data); $_csv_i++) {
$_csv_data[$_csv_i] = preg_replace ('/^ '. $e. '(.*)' . $e. ' $/s ', ' $ ', $_csv_data[$_csv_i]);
$_csv_data[$_csv_i] = Str_replace ($e. $e, $e, $_csv_data[$_csv_i]);
}
return empty ($_line)? False: $_csv_data;
}
------Solution--------------------
Fgetcsv Bug is not able to read Chinese ...
------Solution--------------------
It's true, even if it's 5.3, the multi-byte support is not very good.
------Solution--------------------
Actually, it's a php5.3 problem.