htmlentities() と htmlspecialchars() の違い

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

PHPで頻繁に使う関数として、HTMLエスケープ処理を行うための関数があります。
フォーム入力など、外部からの汚染の可能性があるデータは、出力の前に必ずHTMLエスケープ処理を行う必要がある。
このHTMLエスケープ処理を行う代表的な関数が、表題の関数2つ。

スポンサーリンク

PHPには、似たような機能を持つ関数(または言語構造)がたくさん存在します。
require() と include(), echo() と print() など。
htmlentities() と htmlspecialchars() も似たような機能を持つ関数で、HTMLエスケープを行います。

今日、ぱらぱらとPHPの本(オライリーのプログラミングPHP)を読んでいたら、get_html_translation_table() という関数があるのをはじめてしりました。
これは、htmlentities() と htmlspecialchars() のエスケープ処理の変換テーブルを返す関数です。
実際に使ってみました。

<?php
$table_e = get_html_translation_table(HTML_ENTITIES);
$table_s = get_html_translation_table(HTML_SPECIALCHARS);
echo "<br>----- htmlentities() の変換テーブル -----<br>";
print_r($table_e);
echo "<br>----- htmlspecialchars() の変換テーブル -----<br>";
print_r($table_s);
?>

以下、私の環境(PHP5.2.6)で試した上記コードの実行結果です。(※ブラウザ表示の結果。)

----- htmlspecialchars() の変換テーブル -----
Array
(
    ["] => "
    [<] => <
    [>] => >
    [&] => &
)
----- htmlentities() の変換テーブル -----
Array
(
    [] =>  
    [。] => ¡
    [「] => ¢
    [」] => £
    [、] => ¤
    [・] => ¥
    [ヲ] => ¦
    [ァ] => §
    [ィ] => ¨
    [ゥ] => ©
    [ェ] => ª
    [ォ] => «
    [ャ] => ¬
    [ュ] => ­
    [ョ] => ®
    [ッ] => ¯
    [ー] => °
    [ア] => ±
    [イ] => ²
    [ウ] => ³
    [エ] => ´
    [オ] => µ
    [カ] => ¶
    [キ] => ·
    [ク] => ¸
    [ケ] => ¹
    [コ] => º
    [サ] => »
    [シ] => ¼
    [ス] => ½
    [セ] => ¾
    [ソ] => ¿
    [タ] => À
    [チ] => Á
    [ツ] => Â
    [テ] => Ã
    [ト] => Ä
    [ナ] => Å
    [ニ] => Æ
    [ヌ] => Ç
    [ネ] => È
    [ノ] => É
    [ハ] => Ê
    [ヒ] => Ë
    [フ] => Ì
    [ヘ] => Í
    [ホ] => Î
    [マ] => Ï
    [ミ] => Ð
    [ム] => Ñ
    [メ] => Ò
    [モ] => Ó
    [ヤ] => Ô
    [ユ] => Õ
    [ヨ] => Ö
    [ラ] => ×
    [リ] => Ø
    [ル] => Ù
    [レ] => Ú
    [ロ] => Û
    [ワ] => Ü
    [ン] => Ý
    [゙] => Þ
    [゚] => ß
    [濔 => à
    [畩 => á
    [秕 => â
    [緇 => ã
    [臂 => ä
    [蘊 => å
    [訃 => æ
    [躱 => ç
    [鐓 => è
    [饐 => é
    [鷯 => ê
    [・ => ë
    [・ => ì
    [偰 => í
    [硎 => î
    [・ => ï
    [ => ð
    [ => ñ
    [ => ò
    [ => ó
    [ => ô
    [ => õ
    [ => ö
    [ => ÷
    [ => ø
    [ => ù
    [褜 => ú
    [猤 => û
    [・ => ü
    [] => ý
    [] => þ
    [] => ÿ
    ["] => "
    [<] => <
    [>] => >
    [&] => &
)

一部、配列のキーが文字化けしちゃっていますが、htmlspecialchars() は、純粋にHTMLの特殊文字のみをエスケープするのに対し、htmlentities() は、半角カタカナや記号、ウムラウト付き文字などもエスケープすることが、この変換テーブルから確認できました。

プログラミングPHPは、PHPの基本から書いてあります。
PHP全般のことを勉強するためには、良い本だと思います。
ただし、まとまったスクリプトのサンプルは少なめですので、フォーム入力~入力受け取り~処理・出力など、実際のウェブアプリ作成での処理の流れをつかむには向いていないかもしれません。
オライリーの本でなら、”初めてのPHP5”のほうが実際に使えるツールを作る時なんかには、参考になると思います。

スポンサーリンク
 
スポンサーリンク