我曾经在从不同来源导入许多 csv 文件时遇到类似问题,其中很多条目都不是 UTF-8 字符。这是我所做的,它最终适用于到目前为止的所有文件,旁边有解释评论:
$row[$id] = str_replace(chr(130), ',', $row[$id]); // baseline single quote
$row[$id] = str_replace(chr(131), 'NLG', $row[$id]); // florin
$row[$id] = str_replace(chr(132), '"', $row[$id]); // baseline double quote
$row[$id] = str_replace(chr(133), '...', $row[$id]); // ellipsis
$row[$id] = str_replace(chr(134), '**', $row[$id]); // dagger (a second footnote)
$row[$id] = str_replace(chr(135), '***', $row[$id]); // double dagger (a third footnote)
$row[$id] = str_replace(chr(136), '^', $row[$id]); // circumflex accent
$row[$id] = str_replace(chr(137), 'o/oo', $row[$id]); // permile
$row[$id] = str_replace(chr(138), 'Sh', $row[$id]); // S Hacek
$row[$id] = str_replace(chr(139), '<', $row[$id]); // left single guillemet
$row[$id] = str_replace(chr(140), 'OE', $row[$id]); // OE ligature
$row[$id] = str_replace(chr(145), "'", $row[$id]); // left single quote
$row[$id] = str_replace(chr(146), "'", $row[$id]); // right single quote
$row[$id] = str_replace(chr(147), '"', $row[$id]); // left double quote
$row[$id] = str_replace(chr(148), '"', $row[$id]); // right double quote
$row[$id] = str_replace(chr(149), '-', $row[$id]); // bullet
$row[$id] = str_replace(chr(150), '-', $row[$id]); // endash
$row[$id] = str_replace(chr(151), '--', $row[$id]); // emdash
$row[$id] = str_replace(chr(152), '~', $row[$id]); // tilde accent
$row[$id] = str_replace(chr(153), '(TM)', $row[$id]); // trademark ligature
$row[$id] = str_replace(chr(154), 'sh', $row[$id]); // s Hacek
$row[$id] = str_replace(chr(155), '>', $row[$id]); // right single guillemet
$row[$id] = str_replace(chr(156), 'oe', $row[$id]); // oe ligature
$row[$id] = str_replace(chr(159), 'Y', $row[$id]); // Y Dieresis
//force convert to ISO-8859-1 then convert back to UTF-8 to remove the rest of unknown hidden characters
$row[$id] = iconv("UTF-8","ISO-8859-1//IGNORE",$row[$id]);
$row[$id] = iconv("ISO-8859-1","UTF-8",$row[$id]);