csv ファイルをインポートした後、特殊文字を htmlentities に変換する際に問題が発生しています。
ここにrevelantコードがあります:
setlocale(LC_ALL, 'fr_FR.utf8');
if (empty($errors) && ($handle = fopen($_FILES["file"]["tmp_name"], "r")) !== FALSE) {
$data = array();
while (($rawdata = fgetcsv($handle, 0, $_POST["delimiter"])) !== FALSE) {
for ($i=0; $i < count($rawdata); $i++) {
$data[$i][] = htmlentities(trim($rawdata[$i]), ENT_QUOTES, "UTF-8");
}
}
fclose($handle);
}
ただし、特殊文字 (™ など) を含むセルはすべて削除され、空として返されます。
PHPバージョン5.3.13を使用しています
my を設定してlocale
を試してみputenv
ましたが、何も変わりません。csvを作成する前に、マシンのロケール設定も試しました。csv 自体は Excel ファイルから作成されます。
csv エンコーディングを確認しましたが、BOM なしの UTF-8 で正しく表示されているようです (Notepad++ で確認)。mb_detect_encoding()
また、戻りますUTF-8
。
に変更するとENT_IGNORE
、TM
文字列から記号が取り除かれます。ISO-8859-15
役に立たないなど、さまざまなエンコーディングタイプを試しました。
str_replace("™", "%99", $row)
TM
シンボルを無視してそのままにしておきます。
多くの人がfgetcsv()
エンコーディング/特殊文字に問題を抱えており、そのほとんどはfgets()
. 残念ながら、一部のセルのコンテンツに改行が含まれている可能性があるため、改行で爆発できないため、これらの他の方法を機能させることができませんでした。私がそれを機能させることができれば、別の方法も答えとして受け入れます。