php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法_PHP
date.csv:
"ID" "NAME" "EMAIL"
"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 小明 xm@163.com
2 小东 xd@sina.com
3 小少 shaozi@hotmai.com
fgetcsv函数的字段环绕符默认是双引号,
为什么我读取出来时,其它字段都好好的,可是ID还有双引号包着?
上网查了下,原来是utf8编码的bom在php下无法识别.
下面是查来的资料:
Unicode规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在
这里
找到一段关于BOM的说明:
在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"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网站的
FAQ-BOM
详细介绍了BOM。官方的自然权威,不过是英文的,看起来比较费劲。
UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。我在研究Firefox的时候就知道,在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。
PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在转换->UTF-8转ASCII,或者在另存为里选择ASCII编码。如果是DOS格式的行尾符,可以用记事本打开,点另存为,选ASCII编码。如果包含中文字符的话,可以用UE的另存为功能,选择“UTF-8 无 BOM”即可。请参考下面的图片:
根据Bo-Blog的wiki的说明:Editplus需要先另存为gb,再另存为UTF-8。不过这样做要小心,所有GBK编码中不包含的字符就会都丢了。如果有一些非中文的字符在文件里的话还是不要用这种办法了。(从这一个小方面来看,UE——UltraEdite-32确实比Editplus好很多,Editplus太轻量级了)
另外我发现了一个办法,就是利用Wordpress提供的文件编辑器。这个办法不受限制,不需要去下载专门的编辑器,毕竟大家都在用Wordpress嘛。先在ftp里把要编辑的文件的写入权限打开,然后进入Wordpress后台->管理->文件编辑器,输入要编辑文件的路径,点编辑文件。在显示出来的编辑界面中,你是看不到开头的那三个字符的,不过没关系,把光标定位在整个文件的第一个字符前,按一下Backspace键。OK了,点更新文件吧,在ftp里刷新一下,可以看到文件小了3字节,大功告成。
最后说一下,这是个大问题,所有要自己写插件的,编辑别人的插件自己用的,需要修改模版的(这条估计每个人都需要吧),最好了解一下上面的知识,免得出现问题时不知所措。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









DOM オブジェクトは「ドキュメント」、「要素」、「ノード」、「イベント」、「ウィンドウ」の 5 つ、2.「ウィンドウ」、「ナビゲーター」、「場所」、「履歴」、「画面」、その他 5 つです。 BOM オブジェクト。

BOM と DOM は、役割と機能、JavaScript との関係、相互依存性、さまざまなブラウザーの互換性、セキュリティ上の考慮事項の点で異なります。詳細な紹介: 1. 役割と機能: BOM の主な機能はブラウザ ウィンドウを操作することであり、ブラウザ ウィンドウへの直接アクセスと制御を提供しますが、DOM の主な機能は Web ドキュメントをオブジェクト ツリーに変換し、開発者は、このオブジェクト ツリーを使用して Web ページの要素やコンテンツを取得および変更します。 2. JavaScript などとの関係

PHPbom の意味と機能 PHP プログラミングにおいて、BOM (ByteOrderMark) は、ファイルのエンコード方式とバイト順序を識別するために使用される特殊な文字列です。通常、BOM はファイルの先頭に挿入され、特に UTF-8 などの ASCII エンコードで始まらない一部のエンコード形式の場合、パーサーがエンコードを識別できるようにします。 BOM には、さまざまなエンコード形式でさまざまな機能があります。以下では、PHP における BOM の意味と機能を具体的に調べ、コード例と組み合わせて追加します。

DOM は Web ページ コンテンツへの動的なアクセスと更新を可能にし、BOM はブラウザの動作の制御やブラウザとユーザー環境に関する情報の取得など、ブラウザ ウィンドウと対話するための API を提供します。DOM は主に Web ページ コンテンツの操作に使用され、BOM は主に使用されますブラウザ ウィンドウの操作とブラウザとの対話。この 2 つは共に Web フロントエンド開発の重要な基盤を形成し、開発者に Web ページとブラウザを制御および操作して強力な対話性と優れたユーザー エクスペリエンスを備えた Web アプリケーションを実現するための豊富な方法を提供します。

BOM はブラウザ オブジェクト モデル、DOM はドキュメント オブジェクト モデルです。 BOM は、ブラウザのウィンドウやブラウザが提供するさまざまなオブジェクトを記述するためのモデルであり、ブラウザのコアコンポーネントであり、ブラウザのウィンドウやフレームなどのオブジェクトにアクセスして操作することができます。 DOM は、開発者がスクリプト言語を通じてドキュメント内の要素と属性にアクセスして操作できるようにする一連の API を提供します。その中心的な概念には、ノード、要素、属性、テキストなどが含まれます。DOM ツリーのルート ノードはドキュメント オブジェクトであり、DOM ツリーのルート ノードはドキュメント オブジェクトです。ドキュメントのコンテンツ全体にアクセスします。

違いは次のとおりです: 1. 意味が異なります。BOM はブラウザ オブジェクト モデルを指し、DOM はドキュメント オブジェクト モデルを指します。 2. 構造が異なります。BOM はブラウザ ウィンドウの中央に配置され、DOM ドキュメント内の要素はノードとして表されます。ツリー状に配置され、構造が整理されている; 3. インタラクション方法が異なり、BOM は Window オブジェクトを介して JS とインタラクションし、DOM はオブジェクト間のネストと参照を通じてインタラクションします; 4. アプリケーションスコープが異なり、BOM が使用されますブラウザウィンドウとブラウザ間の対話にはDOMが使用され、ドキュメントコンテンツの操作と対話にはDOMが使用されます; 5. 異なる開発傾向など

PHP コードから BOM を削除する方法: 1. 「function clearbom($contents){...}」メソッドを使用してテキスト内の BOM ヘッダーを削除します; 2. 「function checkBOM ($filename) {...」を使用します。 }" メソッドを使用して、BOM ヘッダーを検出して削除します。 3. "function SearchBOM($string) {...}" メソッドを使用して、現在のファイルに BOM があるかどうかを検索し、BOM ヘッダーを削除します。

PHPBOM の定義とそのアプリケーション シナリオ バイト オーダー マークである BOM (ByteOrderMark) は、テキスト エンコード形式をマークするために使用される特殊な文字シーケンスです。通常、PHP 開発では、特定のコーディング上の問題を解決するために BOM が使用されますが、BOM が正しく処理されないと、ページが文字化けするなどの問題が発生する場合があります。この記事では、PHPBOM の定義とその適用シナリオを詳細に紹介し、読者の理解を深めるために具体的なコード例を添付します。 1.PH
