『htmlentities』『htmlspecialchars』の違い
htmlspecialcharsはデフォルト『<』『>』『&』『"』の4つをHTMLの表現形式に変換。
対して、htmlentitiesはデフォルトで先の4つを含む100個の文字を変換。
とのこと。
つまりより厳密にエスケープしたいなら『htmlentities』を使った方がいいようだ。
ほら、javascriptとか、あるでしょ。
書き方
何でデフォルトと言ってるかっていうと『'』もした方がいいよね常考、ってことで
第2引数は『ENT_QUOTES』は決定です。
第3引数は文字化けるときに使えばいいかと思う。
直接文字コードを設定するか、どっかで
mb_internal_encoding(文字コード);
を実行して、文字コードを設定してるなら『mb_internal_encoding()』。
文字コードを設定してないと『mb_internal_encoding()』書いたとこで、ナチュラルに文字化ける。
指定する文字コードも限られてるから要注意。
日本人なら『UTF-8』『Shift_JIS』『EUC-JP』だって覚えておけば、困らないかと。
まぁ、個人的見解としては『htmlspecialchars』には文字コード設定いらんと思う。
『<』『>』『&』『"』『'』だけだし。
例としては以下な感じ。
htmlspecialchars
$text = htmlspecialchars($text,ENT_QUOTES);
htmlentities
$text = htmlentities($text,ENT_QUOTES,"UTF-8");
『htmlentities』『htmlspecialchars』の変換表
『htmlentities』『htmlspecialchars』
文字変換テーブルはget_html_translation_table関数で確認可能。
htmlspecialchars
print_r(get_html_translation_table(HTML_SPECIALCHARS));
※『HTML_SPECIALCHARS』はデフォルト値だから別に書かなくてもいい
htmlentities
print_r(get_html_translation_table(HTML_ENTITIES));
※実行前に『mb_internal_encoding(文字コード)』をしておかないと文字化けすること有。
『htmlentities』『htmlspecialchars』を元に戻す(デコード)
『実態参照』ていうらしいんだけど『&うんつら;』てのを元に戻したいときあるじゃないですか。
例えば
『&』を書きたくて、入力の際『&』を『&』にしてくれたと。
でも自動変換もかかってたとするじゃないですか。
すると『&amp;』になるわけですよ。
非常に気持ち悪い。
そこで元に戻す方法。
仮に対象が『$text』に入ってたとする
htmlspecialchars
$text = htmlspecialchars_decode($text,ENT_QUOTES);
htmlentities
$text = html_entity_decode($text,ENT_QUOTES,"UTF-8");
だから
さっきの問題を対処するには
htmlspecialchars
$text = htmlspecialchars(htmlspecialchars_decode($text,ENT_QUOTES),ENT_QUOTES);
htmlentities
$text = htmlentities(html_entity_decode($text,ENT_QUOTES,"UTF-8"),ENT_QUOTES,"UTF-8");
となる
状況によっては
$text = htmlspecialchars(html_entity_decode($text,ENT_QUOTES,"UTF-8"),ENT_QUOTES);
のがいいかもしれないね。
関連する投稿
- Newer: SQLiteの特徴
- Older: textarea内BRタグ消去プラグイン:DELETE BR TAG in TEXTAREA
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://qooga.jb-jk.net/wp/2009/10/htmlspecialchars%e3%81%a8htmlentities%e5%a4%89%e6%8f%9b%e3%81%a8%e3%83%87%e3%82%b3%e3%83%bc%e3%83%89/trackback/
- Listed below are links to weblogs that reference
- http://qooga.jb-jk.net/wphtmlspecialcharsとhtmlentities 変換とデコード from MOT:主にプログラム勉強メモ部屋