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”のほうが実際に使えるツールを作る時なんかには、参考になると思います。
- - 関連記事 -
- strpos() や strcmp() など間違えやすいif文での判定
- PHPの内部エンコードと出力文字コード、スクリプト文字コード
- PHPのデバッグ・xdebugをxamppで有効にする
- CakePHPの日本語対応、国際化
- コマンドラインでPHPが起動できない
- 直接ファイルが実行されたときだけ起動するスクリプト
- ディレクトリを探索してリンク一覧表示
- PHPとRubyのコードの書き方を比較
- コメントアウトの使い分けと、/*** ~ ***/とか// — を単語登録
- PHPでvar_dump()を使ったお手軽デバッグコード
- プログラミング練習問題をPHPで解いてみた
- CakePHPはMVCかつフルスタックのフレームワーク
- PHP5のクラス定義とオブジェクトのおさらい
- フレームワークCakePHPにチャレンジ
- sort・asort・ksort 配列を並べ替える関数
- foreach構文
- PHPの配列
- strcmp関数
- strcasecmp関数
- PHPヒアドキュメント