今日、開発するときに、Excel ファイルのデータを関連する設定ファイルにインポートする必要があります。以前よく使用していた方法に従い、最初に Excel を CSV ファイルにエクスポートし、次に fgetcsv 関数を使用してその内容を読み取ります。ファイルを作成し、Yii フレームワークを使用して CConfigure クラスを設定ファイルにエクスポートすると、エクスポートされた配列の一部の値の中央に余分なバックスラッシュがあることがわかります。繁体字中国語または日本語のテキストで表示されます。
まず、csv ファイルと Excel ファイルのフィールドを確認したところ、問題がないことがわかりました。次に、CConfigure クラスの saveAsString 関数を確認したところ、設定をインポートする機能を実装するために php の var_export 関数が使用されていることがわかりました。次に、var_export を使用して問題を引き起こす特定のフィールドを出力したところ、実際に文字列にバックスラッシュが追加されたことがわかりましたが、echo または var_dump を直接使用して出力した場合、この時点では発生しませんでした。問題は var_export 関数にあることがわかりました。
関連情報を確認したところ、var_export 関数が自動的にエスケープすることがわかりました。これが文字列にバックスラッシュが自動的に追加される理由かもしれません。しかし、文字列自体には特殊文字が含まれていないのに、なぜ var_export はバックスラッシュを追加するのでしょうか。問題の文字列のバイナリ エンコーディングを確認したところ、バックスラッシュが表示される単一文字の ASCII コードもバックスラッシュであることがわかりました。つまり、単一のバックスラッシュ文字をエスケープしている可能性があります。理由は結局分かりませんでした。
しかし、この問題を解決する方法がわからなかったとき、CSV のテキスト エンコーディングが gbk であると突然思いました。これは、CSV が Excel を通じて直接変換され、エクスポートしたファイル エンコーディングが utf-8 形式だったためです。同時に、コード自体も UTF-8 形式です。最終的に形式変換によって gbk 文字列をエクスポート用に UTF-8 に変換することに成功しましたが、変換プロセス中に問題が発生する可能性があります (これは当時私が考えていたことです)。 、後で検討します) しばらくして、以前 gbk 形式で var_export を使用したときに問題が発生したため、変換プロセス中に問題になるはずはありません。 var_export が gbk 形式の中国語文字列を処理するときのバグのはずです。 ?) そこで、すべての csv ファイルを UTF-8 形式に変換し、ファイルを再インポートしたところ、正常に解決されました。 www.2cto.com
実際、問題を解決する過程で、非常に早い段階でエンコードの問題ではないかと考えましたが、以前にエクスポートした設定ファイルには漢字が含まれていなかったため、Excelで変換されたCSVファイルの形式の問題は見つかりませんでした。 , このような問題は発生していないので無視していましたが、結局問題は解決したものの、問題自体の原因は不明である可能性が高いと推測されています。当然のことながら、開発中に utf-8 統一エンコーディングを使用するようにしてください。これにより、多くの不明なエラーが軽減されます。
http://www.bkjia.com/PHPjc/477805.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/477805.html技術記事今日は開発時にExcelファイルのデータを関連する設定ファイルにインポートする必要があり、以前よく使っていた方法に従い、最初にExcelをcsvファイルにエクスポートしてから、fgetcsv関数を使用しました...