ホームページ  >  記事  >  バックエンド開発  >  PHP で BOM と <feff> エンコーディングが発生すると、json_decode 関数が問題の PHP チュートリアルを解析できなくなります

PHP で BOM と <feff> エンコーディングが発生すると、json_decode 関数が問題の PHP チュートリアルを解析できなくなります

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

昨日、同僚が奇妙な問題に遭遇しました。つまり、次のコードは JSON 検証に合格できず、PHP の json_decode 関数でも解析できません。

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

[
{
"タイトル": "",
"ピンイン": ""
}


あなたは、目に見えない特殊文字が含まれていると推測できるほど賢いかもしれません。vim で確認してください:
コードをコピーします コードは次のとおりです:

[
{
"タイトル": "",
"ピンイン": ""
}
]

「タイトル」の前に文字 があることがわかります。BOM について学習したことがある場合は、この特殊文字が BOM であることがわかるはずです。その概要については、別の記事「文字列エンコーディング」を参照してください。 、パソコンの文字化け、BOMなどの問題を詳しく解説


Linux で xxd コマンドを使用して、ファイルの 16 進数の内容を表示します。

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

0000000: 5b 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 [. 0000010: ef bb bf 22 74 69 74 6c 65 22 3a 20 22 22 2c 0a ..."title": "",.
0000020: 20 20 20 20 20 20 20 20 22 70 69 6e 79 69 6e 22 "ピンイン"
0000030: 3a 20 22 22 0a 20 20 20 20 7d 0a 5d 0a : "".
。 「タイトル」の前の特殊文字の 16 進値は ef bb bf であることがわかります。これは、UTF-8 とマークされた BOM です。 BOM の意味は次のとおりです:

コードをコピーします コードは次のとおりです:
開始バイト 文字セット/エンコーディング
EF BB BF UTF-8
FE FF UTF-16/UCS-2、リトルエンディアン(UTF-16LE)
FF FE UTF-16/UCS-2、ビッグエンディアン(UTF-16BE)
FF FE 00 00 UTF-32/UCS-4、リトルエンディアン
00 00 FE FF UTF-32/UCS-4、ビッグエンディア
問題を見つけたら、BOM を検索して削除するだけで簡単に解決できます。 Linux での BOM 関連のコマンドは次のとおりです。

VIMのBOM操作


コードをコピーします コードは次のとおりです:
#BOM追加
:爆弾を設置します
#BOM の削除
:爆弾をセット
#クエリBOM
:爆弾を設置しますか?

UTF-8 エンコーディングで BOM を検索


コードをコピーします コードは次のとおりです:grep -I -r -l $'xEFxBBxBF' /path
svn フックで BOM の送信を無効にすることもできます (次のコードはインターネットからのものであり、検証されていません)


コードをコピーします コードは次のとおりです:
#!/bin/sh

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


SVNLOOK=/usr/bin/svnlook

FILES=`$SVNLOOK が変更されました -t "$TXN" "$REPOS" awk {'print $2'}`

$FILES のファイルについては

CONTENT=`$SVNLOOK cat -t "$TXN" "$REPOS" "$FILE"`


if echo $CONTENT | xxd -i | grep -q '0xef, 0xbb, 0xbf'; エコー「ボム!」 1番出口

ふぃ

完了しました

最後に、wowdows のコードを変更するために BOM を自動的に追加するメモ帳などのエディタは使用しないほうがよいことを皆さんに思い出していただきたいと思います。問題が発生しやすいためです。


http://www.bkjia.com/PHPjc/824672.html

www.bkjia.com

http://www.bkjia.com/PHPjc/824672.html技術記事昨日、同僚が奇妙な問題に遭遇しました。つまり、次のコードは JSON 検証に合格できず、PHP の json_decode 関数でも解析できません。 コードをコピーします コードは次のとおりです: [ { "title": "",...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。