説明
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;のような文字が表示される。なお、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

コメント