WordPressで使うエスケープの関数について
WordPressでHTMLが含まれる可能性のある文字列をechoなどで表示する際にはエスケープする必要があります。完全なる無知ですが、WordPressでエスケープする場合はすべて esc_html をつければよいと思っていました…。
先日読んだKindle書籍(Amazon.co.jp: WordPress3.5対応 テーマカスタマイズのためのPHP)のなかで、エスケープする関数は esc_html だけではないという事を知ったので違いや使い方等を調べてみました。
WordPressで使えるエスケープする関数は以下のページで確認できます。
沢山ありますがつかう事がありそうな関数は esc_html と esc_attr 、esc_urlの3つです。
3つの関数の意味・使い方
esc_html と esc_attr は違いがよくわかりませんでしたが、こちらの記事「【WordPressで文字列を出力する際のエスケープ「esc_html」「esc_attr」の違いについて】 | 今村だけがよくわかるブログ」で分かりやすく解説されていました。
esc_html
< > & ” ‘をエンティティ化する。(「<」→「<;」「>」→「>;」等表示に支障がないように置き換えてくれる。)
表示するだけならこの esc_html を使う。
使用例
<?php echo esc_html( $text ) ?>
esc_attr
< > & ” ‘をエンティティ化する。HTMLタグ属性を取り除く。
タグの属性値として出力する際に使用する。
inputなどの値として出力して使う場合はこちらの esc_attr を使う。
使用例
<?php echo '<input type="text" name="fname" value="' . esc_attr( $_POST['fname'] ) . '">'; ?>
esc_url
URL文字列になっているかを調べて、適切でない場合は取り除き、URL文字列として最適化する。
アドレスを出力する際に使う。
使用例
<?php esc_url( $url, $protocols, $_context ); ?>
$protocols は許容されるプロトコルの配列を指定。何も入れなければ ‘http’, ‘https’, ‘ftp’, ‘ftps’, ‘mailto’, ‘news’, ‘irc’, ‘gopher’, ‘nntp’, ‘feed’, ‘telnet’ が適用されるようです。
$_context は特に指定しなくてよいようです。
3つも引数を指定できますが、最初の $url が指定されて入れば大丈夫そうです。
これからはきちんと使いわけして行こうと思いました。今までよく知らずに使っていたのが怖いです…。
1 Comments & Tracbacks