【WordPressで文字列を出力する際のエスケープ「esc_html」「esc_attr」の違いについて】

変数に格納された値を出力することはよくあると思いますが、エスケープについては、ちゃんと意識しないといけないですよね。それで、WordPressでよく使う、

  • esc_html
  • esc_attr

これについて、はっきりとした使い分けがあるのでメモしました。お時間がありましたら、ご覧くださいませ。

「esc_html」とは

Codex英語版のみ見つかりましたので、引用いたします。Function Reference/esc html

Escaping for HTML blocks.

・・・もう少し説明が欲しいところではあります。

「esc_html」の使い方サンプルはこうです。

<?php esc_html( $text ) ?>

「esc_attr」とは

こちらもCodex英語版から。Function Reference/esc attr

Encodes < > & ” ‘ (less than, greater than, ampersand, double quote, single quote).

Will never double encode entities.

Always use when escaping HTML attributes (especially form values) such as alt, value, title, etc.

If needing to the echo value, the use the esc_attr_e() instead.

This prevents issues with foreign language characters as well.

「esc_attr」はCodex日本語版がありましたので書かれてある説明を引用しますと・・・

< > & ” ‘ (小なり、大なり、アンパサンド、ダブルクォート、シングルクォート) をエンコードします。

既にエンコードされている場合は二重にエンコードしません。

と、ちょっと省略されていますでしょうかね、もしかしてですけども・・。たぶん以下を追記すると理解が早まるかもです。

esc_attrは、HTML属性(特にフォームの値)に使われる。

例えば「input」タグの「alt」「value」「title」などなど・・・

と、これでどうでしょうか。なんとなくピンと来ました私は。

Codex英語版で紹介されている「esc_attr」の使い方サンプルも以下のようになっています。

<?php echo '<input type="text" name="fname" value="' . esc_attr( $_POST['fname'] ) . '">';  ?>

inputタグ中の属性「value」の値を出力する際に使っていますね。

「attr」とはattribute(属性)を略しているだけこと

「esc_attr」の「attr」は、「attribute(属性)」を略したもの、という理解でいいと思います。

ですので、本来の元となったであろう英単語の意味を理解すれば、混乱は防げますね。

  • htmlテキストとして出力する場合は「esc_html」
  • htmlタグの属性として出力す場合は「esc_attr」

でOKです。

著者:bouya Imamura