ホームページ  >  記事  >  バックエンド開発  >  PHP は BOM ヘッダーを削除します

PHP は BOM ヘッダーを削除します

WBOY
WBOYオリジナル
2016-07-25 08:42:14879ブラウズ

BOM: バイト オーダー マーク UTF-8 BOM は UTF-8 シグネチャとも呼ばれます。実際には、UTF-8 の BOM は UFT-16 と UTF-32 をサポートするために追加されたものです。 BOM 署名は、編集者の識別を容易にするために現在のファイルがどのようなエンコーディングを使用しているかをエディターに伝えるだけです。ただし、BOM はエディターには表示されませんが、PHP を変更した場合と同様に出力が生成されます。ファイルを開くと、次のようなことが起こります。 ログインまたはログアウトできません。 * ページの上部に空白行が表示されます。 * ページの上部にエラー警告が表示されます。 その他の異常な状況。おそらくエディターの問題です。このプログラムは UTF-8 エンコーディングを使用します。ほぼすべてのテキスト編集ソフトウェアは、UTF-8 でエンコードされたファイルを表示および編集できるようになりました。しかし、残念ながら、それらの多くはパフォーマンスが良くありません。 WINDOWS に付属のメモ帳などのソフトウェアは、UTF-8 でエンコードされたファイルを保存するときに、ファイルの先頭に 3 つの非表示文字 (0xEF 0xBB 0xBF、または BOM) を挿入します。これは、メモ帳などの編集者がファイルが UTF-8 でエンコードされているかどうかを識別できるようにするために使用される隠し文字の文字列です。通常のファイルの場合は問題ありません。しかし、PHP の場合、BOM が問題になります。 PHP は BOM を無視しないため、これらのファイルの読み取り、組み込み、または参照の際、BOM はファイルの先頭テキストの一部として使用されます。組み込み言語の特性上、この文字列が直接実行(表示)されます。その結果、ページの上部パディングを 0 に設定しても、HTML の先頭にこれらの 3 文字があるため、Web ページ全体をブラウザの上部近くに配置することはできません。最大の問題はこれではない。 COOKIE 送信メカニズムの制限により、ファイルの先頭に BOM がすでに存在するファイルでは、COOKIE を送信できません (COOKIE が送信される前に PHP がファイル ヘッダーを送信しているため)。関数が無効です。 COOKIE および SE SSION に依存する関数はすべて無効です。したがって、テキスト ファイルを編集または変更する場合は、BOM がランダムに追加されないエディタを使用してください。 Linux 上のエディタではこの問題は発生しません。 WINDOWSではメモ帳などのエディタは使用しないでください。推奨されるエディターは、Editplus バージョン 2.12 以降、UltraEdit (「BOM の追加」の関連オプションをキャンセルする必要があります)、「BOM の追加」の関連オプションをキャンセルする必要があります。 BOM が付加されているファイルの場合、キャンセルしたい場合は上記のエディタを使用して一度保存することができます。 (Editplus は最初に gb として保存し、次に UTF-8 として保存する必要があります。)、プログラムの解決策は次のとおりです:

[PHP]コード

  1. $auto = 1;
  2. checkdir('C:projectweibo');
  3. function checkdir($basedir){
  4. if ($dh = opendir($basedir)) {
  5. while (( $file = readdir($dh)) !== false) {
  6. if($file{0} == '.')
  7. {
  8. continue;
  9. }
  10. if ($file != '.' && $file ! = '..'){
  11. if (!is_dir($basedir."/".$file)) {
  12. echo "ファイル名: $basedir/$file ".checkBOM("$basedir/$file")." < ;br>";
  13. }else{
  14. $dirname = $basedir."/".$file;
  15. checkdir($dirname);
  16. }
  17. }
  18. }
  19. closedir($dh);
  20. }
  21. }
  22. function checkBOM ($filename) {
  23. global $auto;
  24. $contents = file_get_contents($filename);
  25. $charset[1] = substr($contents, 0, 1);
  26. $charset[2] = substr($contents, 1, 1);
  27. $charset[3] = substr($contents, 2, 1);
  28. if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord ($charset[3]) == 191) {
  29. if ($auto == 1) {
  30. $rest = substr($contents, 3);
  31. rewrite ($filename, $rest);
  32. return ("< font color=red>BOM が見つかりました。自動的に削除されました。");
  33. } else {
  34. return ("BOM が見つかりました。");
  35. }
  36. }
  37. else return ("BOM が見つかりません。");
  38. }
  39. function rewrite ($filename, $data) {
  40. $filenum = fopen($filename, "w");
  41. flock($filenum, LOCK_EX);
  42. fwrite( $filenum, $data);
  43. fclose($filenum);
  44. }
  45. ?>
コードをコピー
PHP、BOM


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。