1

私はこのコードで奇妙な振る舞いをしています

        foreach ($files as $key => $error) {  
            if ($error == UPLOAD_ERR_OK) {  

                $name = $_FILES["excelFiles"]["name"][$key];  


                $handle = fopen($_FILES["excelFiles"]["tmp_name"][$key], "r"); 

                while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                    print_r($data);
                    echo "\r\n";
                }
                fclose($handle);

            }}

問題は、アポストロフィを持つヘブライ語の文字列が切り取られることです (ただ空中に消えてしまいます)。

これは、たとえば 1 行の結果です。

Array
(
    [0] => '
    [1] => אני לא רעבה, תודה
)
4

1 に答える 1

2

これfgetcsvは、ファイルが現在のロケールで使用されているエンコードでエンコードされることを期待しているためです。

ノート:

この関数では、ロケール設定が考慮されます。LANG が例えば en_US.UTF-8 の場合、この関数によって 1 バイト エンコーディングのファイルが正しく読み取られません。

これはあなたの場合にも起こります。

この問題を解決するには、次のいずれかを実行する必要があります。

  • 入力ファイルのエンコーディングと一致するロケールに設定します。そのようなロケールがプラットフォームで利用可能で、エンコーディングがわかっている場合
  • 入力ファイルの有効なエンコーディングを制限し、ロケール互換のエンコーディングのみを有効にします
  • ファイルをロードし、エンコーディングをロケールに一致するエンコーディングに変換して前処理し、変換されたデータでメモリ ストリームを使用するか、メモリ ストリームstr_getcsvを指すことによってデータを読み取ります (およびを参照)。fgetcsvphp://memoryphp://temp
于 2012-12-05T12:21:56.550 に答える