MENU

esc_html()– Function –

esc_html()は、HTMLタグが含まれる文字列をエスケープして安全に出力するためのテンプレートタグです。ユーザー入力の出力時などに利用されます。

目次

機能の説明

esc_html()は、HTMLタグや特殊文字をエスケープすることで、不正なコードの実行を防ぎます。特に、ユーザー入力をそのまま出力するときに使用します。これにより、サイトのXSS(クロスサイトスクリプティング)攻撃を防ぐことができます。

シンプルなコード例

<?php  
$input = '<strong>Hello</strong> <script>alert("XSS")</script>';  
echo esc_html($input);  
?>

この例では、<strong>タグや<script>タグがエスケープされ、ページには&lt;strong&gt;Hello&lt;/strong&gt; &lt;script&gt;alert("XSS")&lt;/script&gt;のように表示されます。

使い方の解説

esc_html()は、HTMLを含む可能性のある変数をエスケープして出力する際に使用します。
これは特に、ユーザーがフォームやコメントで入力したデータをそのまま表示する場合など、セキュリティの観点から推奨される関数です。

引数

$text (必須)

エスケープしたい文字列を指定します。

戻り値

エスケープされた文字列

HTMLタグや特殊文字がエスケープされた文字列を返します。

オプション

esc_html()自体にはオプションはありません。

使用例

<?php  
$user_name = '<b>John Doe</b>';  
echo 'こんにちは、' . esc_html($user_name) . 'さん!';  
?>

この例では、<b>タグがエスケープされ、こんにちは、&lt;b&gt;John Doe&lt;/b&gt;さん!と表示されます。

一緒に使うことが多い関連タグ

wp_kses()

wp_kses()は、許可したHTMLタグのみを通し、それ以外をエスケープします。より柔軟にHTMLを制御したいときに使います。

<?php  
$allowed_tags = array(  
    'strong' => array(),  
    'em' => array()  
);  
echo wp_kses('<strong>Hello</strong> <script>alert("XSS")</script>', $allowed_tags);  
?>

この例では、<strong>は許可されますが、<script>はエスケープされます。

esc_attr()

esc_attr()は、HTML属性値をエスケープします。フォームのvalue属性などで使用されます。

<?php  
$value = '<script>alert("XSS")</script>';  
echo '<input type="text" value="' . esc_attr($value) . '">';  
?>

この例では、<script>がエスケープされ、属性値として安全に表示されます。

追加情報を取得したい場合

wp_kses_post() で取得できる情報

<?php  
$content = '<p>この文章は<strong>重要</strong>です。</p>';  
echo wp_kses_post($content);
?>

wp_kses_post()は、投稿内で許可されているHTMLタグのみを通過させます。

出力できる情報

  • p: 段落タグ
  • strong: 強調テキスト
  • em: イタリックテキスト

想定されるトラブル

エスケープされるべきHTMLがそのまま表示されてしまう

esc_html()を使うべき箇所で使われていない。

解決策

HTMLタグを含む可能性のある変数には必ずesc_html()を使用してください。

必要なHTMLタグがエスケープされてしまう

エスケープしなくてよいHTMLタグがある場合でもesc_html()を使用している。

解決策

その場合はwp_kses()を使い、必要なタグのみ許可します。

Q&A

esc_html()esc_attr()の違いは何ですか?

esc_html()はHTMLコンテンツ全体をエスケープし、esc_attr()はHTML属性内の値をエスケープします。

すべてのHTMLをエスケープせずに特定のタグだけ許可したい場合はどうすればいいですか?

wp_kses()を使い、許可するHTMLタグを指定してください。

まとめ

esc_html()は、HTMLタグや特殊文字をエスケープするためのテンプレートタグで、特にユーザー入力の表示時に使われます。サイトのセキュリティを強化し、不正なコード実行を防ぐために欠かせない関数です。

カスタマイズ例

1