ホームページ  >  記事  >  バックエンド開発  >  ページBOM(UTF-8)の空白行を検出・削除する方法_PHPチュートリアル

ページBOM(UTF-8)の空白行を検出・削除する方法_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:49:141048ブラウズ

理由もなくページに空白行が存在することがよくありますが、これは BOM (UTF-8) が原因であることがわかっています。 (UTF-8) の検出および削除方法。

下の図は、上記の状況が発生した後にfirebugで表示されたHTMLコードです。

図1

不可解なことに余分な空白行がありますが、ソースコードを見ると、空白行はありません。


私の最も一般的な方法は、php を使用して置き換えることです

BOM: ユニバーサル コード ファイル署名 BOM (バイト オーダー マーク、U+FEFF)

BOM の内容は、UNICODE がどのエンコーディングであるかを示すことができますが、受信したファイルを逆アセンブルして DB に書き込む必要があります。BOM を見るのは少し面倒です。


utf8_encode では、BOM の書き込み/削除をテストするために使用できるプログラムが 2 つありました。

書き込まれたファイルの内容の前にBOMを追加します

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

関数 writeUTF8File($filename,$content)
{
$f = fopen($filename, 'w');
fwrite($f, Pack("CCC", 0xef,0xbb,0xbf));
fwrite($f,$content);
fclose($f);
}
?>

BOM機能を削除

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

関数removeBOM($str = '')
{
if (substr($str, 0,3) == Pack("CCC",0xef,0xbb,0xbf)) {
$str = substr($str, 3);
}
$str;
を返します }
?>

上記の BOM = Pack("CCC",0xef,0xbb,0xbf) なので、BOM を削除するには、上記の RemoveBOM 関数または次のいずれかを使用できます:

■str_replace("锘�", '', $bom_content);
■preg_replace("/^锘�/", '', $bom_content);
この文字列が UTF-8 であるかどうかを判断する関数も参照してください:

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

関数はUTF8($string)です
{
Return (utf8_encode(utf8_decode($string)) == $string);
}

Linuxシステムの問題を解決するにはシェルを使用してください

UTF-8 エンコーディングでの BOM の検出と削除について詳しく説明する前に、例でウォームアップしてみましょう:

コードは次のとおりです コードをコピー
shell -s http://www.bKjia.c0m/ | sed -n l
锘� //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> $

上に示すように、最初の 3 バイトはそれぞれ 357、273、277 であり、8 進数の BOM です。

コードは次のとおりです コードをコピー
シェル>curl -s http://www.111cn.Net/head -C
00000000 ef bb bf 3c 21 44 4f 43 54 59 50 45 20 68 74 6d |... 00000010 6c 20 50 55 42 4c 49 43 20 22 2d 2f 2f 57 33 43 |l パブリック "-//W3C|
00000020 2f 2f 44 54 44 20 58 48 54 4d 4c 20 31 2e 30 20 |//DTD XHTML 1.0 |
00000030 54 72 61 6e 73 69 74 69 6f 6e 61 6c 2f 2f 45 4e |移行//EN|
00000040 22 20 22 68 74 74 70 3a 2f 2f 77 77 77 2e 77 33 |" "http://www.w3|
00000050 2e 6f 72 67 2f 54 52 2f 78 68 74 6d 6c 31 2f 44 |.org/TR/xhtml1/D|
00000060 54 44 2f 78 68 74 6d 6c 31 2d 74 72 61 6e 73 69 |TD/xhtml1-transi|
00000070 74 69 6f 6e 61 6c 2e 64 74 64 22 3e 0d 0a |tional.dtd">..|

上に示すように、最初の 3 バイトは EF、BB、BF であり、16 進数の BOM です。 注: サードパーティ Web サイトのページが使用されるため、サンプルが常に利用可能であるという保証はありません。 実際にプロジェクトを開発する場合、数百、数千のテキスト ファイルが BOM と混在している場合、BOM を含む UTF-8 テキスト ファイルが存在しない場合は、vi を使用して作成することができます。関連するコマンドは次のとおりです。

UTF-8 エンコーディングを設定します:

コードは次のとおりですコードをコピー:ファイルエンコーディング=utf-8を設定します
BOM の追加:

コードは次のとおりですコードをコピー:爆弾を設置

BOM を削除:

コードは次のとおりです コードをコピー
:爆弾を設定しない

BOM のクエリ:

コードは次のとおりです コードをコピー
:爆弾を設置しますか?

UTF-8 エンコーディングで BOM を検出するにはどうすればよいですか?

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

shell> grep -r -I -l $'^锘�' /path UTF-8 エンコードで BOM を削除するにはどうすればよいですか?

shell> grep -r -I -l $'^锘�' /path xargs sed -i 's/^锘�//;q'

推奨: SVN を使用する場合は、関連するコードをコミット前フックに追加して、BOM を排除できます。

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

#!/bin/bash

リポス = "$1"
TXN="$2"

SVNLOOK=/usr/bin/svnlook

$($SVNLOOK が変更されました -t "$TXN" "$REPOS" | awk '/^[AU]/ {print $NF}') の FILE について If $SVNLOOK cat -t "$TXN" "$REPOS" "$FILE" | then
echo "バイト オーダー マークは $FILE にあります" 1>&2
1番出口
ふぃ
完了しました

この記事では多くのシェルコマンドを使用します

方法 3、Ultraedit エディターを使用してドキュメントを直接変更します

空白行を含むドキュメントを BOM 形式で保存します。


下の図は、ultraedit がドキュメントを保存するときのエンコード形式です:

図2

内部で UTF8 を選択します - BOM なし、すべてが解決されます

http://www.bkjia.com/PHPjc/632732.htmlwww.bkjia.com本当http://www.bkjia.com/PHPjc/632732.html技術記事ページ内に理由もなく空白行が存在することがよくありますが、それをエディターで見ると、これが BOM (UTF-8) によって引き起こされていることがわかります。いくつかの問題を紹介します。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。