2

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_IGNORETM文字列から記号が取り除かれます。ISO-8859-15役に立たないなど、さまざまなエンコーディングタイプを試しました。

str_replace("™", "%99", $row)TMシンボルを無視してそのままにしておきます。

多くの人がfgetcsv()エンコーディング/特殊文字に問題を抱えており、そのほとんどはfgets(). 残念ながら、一部のセルのコンテンツに改行が含まれている可能性があるため、改行で爆発できないため、これらの他の方法を機能させることができませんでした。私がそれを機能させることができれば、別の方法も答えとして受け入れます。

4

1 に答える 1

1

iconv()for ループで rawdataを使用すると、問題が解決しました。

$data[$i][] = htmlentities(iconv("cp1252", "utf-8", trim($rawdata[$i])), ENT_IGNORE, "UTF-8");

PHP チャットの @Leigh、Wrikken、DaveRando に感謝します ;)

于 2013-08-09T13:55:08.633 に答える