ホームページ >バックエンド開発 >PHPチュートリアル >php が csv ファイルを読み込んだ後、page_PHP チュートリアルに表示される uft8 bom の問題の解決策

php が csv ファイルを読み込んだ後、page_PHP チュートリアルに表示される uft8 bom の問題の解決策

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-07-21 14:58:49799ブラウズ

date.csv:
「ID」「名前」「メールアドレス」
「1」「暁明」「xm@163.com」
「2」「暁東」「xd@sina.com」
「3」 「小小」「shaozi@hotmai.com」

この CSV ファイルを読んでください

コードをコピーします コードは次のとおりです:

$handle=fopen('date.csv','r');
while ($data =fgetcsv($handle,10000,"/t"))
{
echo "$data[0]"."$data[1]"."$data[2]"?> ;


読み取り後にページに表示すると次のようになります:
「ID」 NAME EMAIL
1 Xiaoming xm@163.com
2 Xiaodong xd@sina.com
3 Xiaoshao shaozi@hotmai.com
fgetcsv フィールド関数の周囲の文字はデフォルトで二重引用符で囲まれています
読み出すと、他のフィールドはすべて問題ないのに、ID が依然として二重引用符で囲まれているのはなぜですか?

オンラインで調べたところ、utf8 でエンコードされた BOM は PHP では認識できないことがわかりました。
私が見つけた情報は次のとおりです。
Unicode 仕様には BOM の概念があります。 BOM - バイト オーダー マーク。バイト オーダー マークです。 BOM に関する説明はここでご覧ください

:
UCS エンコードには「ZERO WIDTH NO-BREAK SPACE」と呼ばれる文字があり、そのエンコードは FEFF です。 FFFE は UCS には存在しない文字ですので、実際の送信では出現しないはずです。 UCS 仕様では、バイト ストリームを送信する前に文字「ZERO WIDTH NO-BREAK SPACE」を送信することを推奨しています。このように、受信機が FEFF を受信した場合は、バイト ストリームがビッグ エンディアンであることを示し、FFFE を受信した場合は、バイト ストリームがリトル エンディアンであることを示します。したがって、「ZERO WIDTH NO-BREAK SPACE」という文字は BOM とも呼ばれます。

UTF-8 はバイト順序を示すために BOM を必要としませんが、BOM を使用してエンコード方式を示すことができます。文字「ZERO WIDTH NO-BREAK SPACE」の UTF-8 エンコーディングは EF BB BF です。したがって、受信側が EF BB BF で始まるバイト ストリームを受信すると、それが UTF-8 でエンコードされていることを認識します。
Windows は BOM を使用してテキスト ファイルのエンコード方法をマークします。

また、Unicode Web サイトの
FAQ-BOM
では、BOM について詳しく紹介されています。公式の自然典拠は英語のみであり、これは手間がかかるように思えます。
UTF-8 でエンコードされたファイルでは、BOM は 3 バイトを占めます。メモ帳を使用してテキスト ファイルを UTF-8 エンコードで保存し、UE でファイルを開いて 16 進編集状態に切り替えると、先頭に FFFE が表示されます。これは、UTF-8 でエンコードされたファイルを識別するための良い方法です。ソフトウェアでは、BOM を使用して、ファイルが UTF-8 でエンコードされているかどうかを識別します。また、多くのソフトウェアでは、読み取るファイルに BOM が必要です。ただし、BOM を認識できないソフトウェアはまだ多くあります。 Firefox について勉強していたとき、Firefox の初期バージョンでは拡張機能に BOM を含めることができなかったが、Firefox 1.5 以降のバージョンでは BOM をサポートし始めたことを知りました。さて、PHP も BOM をサポートしていないことがわかりました。

PHP は設計時に BOM の問題を考慮しませんでした。つまり、UTF-8 でエンコードされたファイルの先頭にある BOM の 3 文字は無視されません。変換 -> UTF-8 を ASCII に変換するか、「名前を付けて保存」で ASCII エンコードを選択する必要があるためです。 DOS 形式で終わる行の場合は、メモ帳で開き、[名前を付けて保存] をクリックして、ASCII エンコードを選択します。漢字が含まれている場合は、UE の名前を付けて保存機能を使用して、「UTF-8 without BOM」を選択できます。下の図を参照してください:


Bo-Blog の wiki によると: Editplus は最初に gb として保存し、次に UTF-8 として保存する必要があります。ただし、GBK エンコーディングに含まれていない文字はすべて失われるため、これを行う場合は注意してください。ファイルに中国語以外の文字が含まれている場合は、この方法を使用しないことをお勧めします。 (この小さな側面から見ると、UE-UltraEdite-32 は確かに Editplus よりも優れています。Editplus は軽量すぎます)

さらに、WordPress が提供するファイル エディターを使用する方法も見つけました。この方法には制限がなく、特別なエディタをダウンロードする必要もありません。結局のところ、誰もが WordPress を使用しているのです。まず、編集したいファイルの書き込み権限をftpで開き、WordPressバックエンド→管理→ファイルエディタに入り、編集したいファイルのパスを入力して「ファイル編集」をクリックします。表示される編集インターフェイスでは、最初の 3 文字が表示されませんが、ファイル全体の最初の文字の前にカーソルを置き、Backspace キーを押します。 [OK] をクリックし、[ファイルの更新] をクリックして FTP で更新すると、ファイルが 3 バイト小さくなっていることが確認でき、完了です。

最後に、これは大きな問題です。独自のプラグインを作成したい人、自分用に他の人のプラグインを編集したい人、またはテンプレートを変更する必要がある人 (これは誰でも必要だと思います) にとっては、次のことが最善です。不必要な間違いを避けるために上記の知識を理解してください。何か問題が発生したときに何をすべきかわからない。

http://www.bkjia.com/PHPjc/328186.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/328186.html技術記事 date.csv: "ID" "NAME" "EMAIL" "1" "Xiao Ming" "xm@163.com" "2" "Xiaodong" "xd@sina.com" "3" "小少" "shaozi@ hotmai.com" この CSV ファイルを読み取るためのコピー コードは次のとおりです: ?php $handle=fo...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。