esc_html() の使い方|説明・引数・注意点

説明

esc_html() は、HTMLの特殊文字(< > & など)を変換し、HTMLの本文として安全に出力できるようにする関数です。

基本構文

esc_html( string $text ): string

引数

  • $text:エスケープする文字列

戻り値

エスケープ済みの文字列。

使い方(サンプル)

echo esc_html( get_the_title() );

注意点

  • HTML要素の中身(テキスト)に出力するときに使います。
  • 属性値には esc_attr()、URLには esc_url() を使い分けます。
  • 「保存時」ではなく「出力時」にエスケープするのが原則です。

実務での使いどころ

  • 投稿タイトルやカスタムフィールドの値など、DBやユーザー入力の値を、HTMLのテキストとして出力するとき。
  • echo esc_html( get_post_meta( ... ) ) のように、出力する直前にエスケープするとき。
  • esc_html_e() と組み合わせて、翻訳文字列を安全に出力するとき。

よくあるミスと対処

  • HTML属性の値に esc_html() を使っている。属性値には esc_attr() を使います。
  • URLに esc_html() を使っている。リンク先には esc_url() を使います。
  • HTMLタグを含む値を esc_html() に通し、タグが文字として表示される。タグを残したいときは wp_kses_post() を使います。
  • 保存時にサニタイズしただけで、出力時のエスケープを省いている。出力の直前に、毎回エスケープします。
  • htmlspecialchars() など、二重にエンコードする関数と重ねて使い、&amp;amp; のような文字が表示される。なお、esc_html() は、すでにエンティティになっている部分を再変換しません。

NG例

<a href="<?php echo esc_html( $url ); ?>">リンク</a>

OK例

<a href="<?php echo esc_url( $url ); ?>">リンク</a>

使い分け早見表

出力先 使う関数
HTMLのテキスト esc_html()
HTMLの属性値 esc_attr()
URL esc_url()
テキストエリアの中身 esc_textarea()
HTMLの属性内のインラインJavaScript(onclick など) esc_js()
HTMLタグを一部許可して出力 wp_kses_post()

関連項目

esc_attr()、esc_url()、wp_kses()、esc_textarea()、esc_js()、wp_kses_post()

公式リファレンス:esc_html() | Function | WordPress Developer Resources

コメント

タイトルとURLをコピーしました