ホームページ  >  記事  >  バックエンド開発  >  php htmlentities と htmlspecialchars_PHP チュートリアルの違い

php htmlentities と htmlspecialchars_PHP チュートリアルの違い

WBOY
WBOYオリジナル
2016-07-21 15:50:56683ブラウズ

実行される変換は次のとおりです:

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

'&' (アンパサンド) は '&' になります
'"' (二重引用符) は ENT_NOQUOTES が設定されていない場合は '"' になります
' (一重引用符) は ''' になります。
' (より小さい) は '>' になります。 htmlspecialchars は上記のいくつかの HTML コードのみを変換しますが、htmlentities は認識できない漢字を含むすべての HTML コードを変換します。

比較のために簡単な例を見てみましょう:



コードをコピーします
コードは次のとおりです: $str='テスト ページecho htmlentities($str);
// ²âÔÔÃæ

$str=' page ';
echo htmlspecialchars($str);
// テストページ


結論としては、中国語 htmlspecialchars を使用します。そうしないと文字化けする可能性があります

このカスタム関数も参照してください



コードをコピーします
コードは次のとおりです: function my_excerpt( $html, $len ) { // $html HTML ドキュメントを含める必要があります。
// この例では、HTML タグ、JavaScript コード
//、および空白文字を削除します。一部の一般的な
// HTML エンティティも、対応するテキストに変換されます。
$search = array ("']*?>.*?'si", // JavaScript を削除します
"'<[/!]*?[^< ;>]*?>'si", // HTML タグを削除します
"'([rn])[s]+'", // 空白文字を削除します
"'&(quot|#34);'i ", // HTML エンティティを置換します
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i ",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"' &(pound|#163);'i",
"'&(copy|#169);'i",
"'(d+);'e"); // PHP コードとして実行
$replace = 配列 ("",
"",
"\1",
""",
"&",
"<",
">",
" ",
chr(161),
chr (162),
chr(163),
chr(169),
"chr(\1)");
$text = preg_replace ($search, $replace, $html); );
return mb_strlen($text) >= $len ? mb_substr($text, 0, $len) : '';


htmlspecialchar() 関数は HTML コードの変換に似ています。 htmlspecialchars_decode は、変換された HTML エンコーディングを元に戻すためのものです

比較のために簡単な例を取り上げます:


コードをコピーします

コードは次のとおりです:
$str='test'; $transstr = htmlspecialchars($str); echo $transstr . "
";
echo htmlspecialchars_decode($transstr)";

を実行します。上記のコードを見ると、2 つの違いがわかります。

PHP の htmlentities 関数と htmlspecialchars 関数が html の特殊文字を対応する文字エンティティに変換できることは以前から知っていました (変換方法はわかりません)。また、htmlentities と htmlspecialchars には違いがあることも以前から知っていました。関数を使用したことはありますが、これら 2 つの関数の違いを勉強したことはありません。

今日使用しました。PHPマニュアルの鳥の言語を読むのが面倒だったので、誰かがこの種の質問を中国語で書いているはずだと思い、キーワード「htmlentities htmlspecialchars」で検索しましたが、答えは同じでした。 。小学生でもコピペできるくらいには慣れてきました。比較した結果、各記事には大まかに 2 つの部分が含まれていることがわかりました:

最初の部分は PHP マニュアルからの引用です:

PHP マニュアルには htmlspecialchars について書かれています:

実行された翻訳は次のとおりです:



コードをコピー

コードは次のとおりです。
'&' (アンパサンド) は '&' になります '"' (二重引用符) は ENT_NOQUOTES が設定されていない場合は '"' になります "' (一重引用符) は ENT_QUOTES の場合のみ ''' になります。 ' (より小さい) は '>' になります。
この部分は理解できますが、2 番目の部分の説明はあまり正確ではありません。

htmlspecialchars は上記のいくつかの HTML コードのみを変換しますが、htmlentities は認識できない漢字を含むすべての HTML コードを変換します。

比較のために簡単な例を見てみましょう:
コードをコピーします コードは次のとおりです:

$str='テスト ページ ';
echo htmlentities($str);

// ²âÔÒ³Ãæ test.html">テスト ページ';
echo htmlspecialchars($str);
// テスト ページ

?>


結論としては、中国語がある場合はhtmlspecialcharsを使うのがベスト、そうでないと文字化けする可能性があります。

htmlentities 関数にはパラメータが 1 つしかありませんか?もちろん違います! htmlentities には、$quote_style、$charset、$double_encode という 3 つのオプションのパラメータもあります。マニュアルでは、$charset パラメータについて次のように説明しています。

変換に使用される文字セットを定義します。 デフォルトの文字セットは

です。上記のプログラムで出力された結果から判断すると、$str は GB2312 でエンコードされており、「テスト ページ」という単語に対応する 16 進値は

B2 E2 CA D4 D2 B3 C3 E6

ただし、ISO- と見なされます。解析する 8859-1 エンコーディング:

²âÊÔÒ³Ãæ

は HTML 文字エンティティ:

²âÊÔÒ³Ãæ

もちろん htmlentities によってエスケープされますが、正しいエンコーディングがパラメーターとして追加されている限り、いわゆる中国語の文字化けコードの問題:

$str='テスト ページ';

echo htmlentities($str, ENT_COMPAT, 'gb2312') );
// < ;a href="test.html">テストページ3人が虎になって噂を広める。

結論: htmlentities と htmlspecialchars の違いは、htmlentities はすべての HTML 文字エンティティを変換するのに対し、htmlspecialchars はマニュアルにリストされているいくつかの HTML 文字エンティティ (つまり、HTML 解析に影響する基本文字) のみを変換することです。一般に、基本文字の変換には htmlspecialchars を使用するだけで十分であり、htmlentities を使用する必要はありません。実際に htmlentities を使用する場合は、3 番目のパラメータに正しいエンコーディングを渡すように注意してください。

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

tru​​ehttp://www.bkjia.com/PHPjc/319281.html技術記事実行される変換は次のとおりです。 コードをコピーします。 コードは次のとおりです。 'amp;' '"' (二重引用符) は、ENT_NOQUOTES が設定されていない場合は '' になります。 ''' (一重引用符) は、ENT_QUOTES が設定されている場合のみ '' になります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。