esc_html()
は、HTMLタグが含まれる文字列をエスケープして安全に出力するためのテンプレートタグです。ユーザー入力の出力時などに利用されます。
機能の説明
esc_html()
は、HTMLタグや特殊文字をエスケープすることで、不正なコードの実行を防ぎます。特に、ユーザー入力をそのまま出力するときに使用します。これにより、サイトのXSS(クロスサイトスクリプティング)攻撃を防ぐことができます。
シンプルなコード例
<?php
$input = '<strong>Hello</strong> <script>alert("XSS")</script>';
echo esc_html($input);
?>
この例では、<strong>
タグや<script>
タグがエスケープされ、ページには<strong>Hello</strong> <script>alert("XSS")</script>
のように表示されます。
使い方の解説
esc_html()
は、HTMLを含む可能性のある変数をエスケープして出力する際に使用します。
これは特に、ユーザーがフォームやコメントで入力したデータをそのまま表示する場合など、セキュリティの観点から推奨される関数です。
引数
- $text (必須)
-
エスケープしたい文字列を指定します。
戻り値
- エスケープされた文字列
-
HTMLタグや特殊文字がエスケープされた文字列を返します。
オプション
esc_html()
自体にはオプションはありません。
使用例
<?php
$user_name = '<b>John Doe</b>';
echo 'こんにちは、' . esc_html($user_name) . 'さん!';
?>
この例では、<b>
タグがエスケープされ、こんにちは、<b>John Doe</b>さん!
と表示されます。
一緒に使うことが多い関連タグ
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()
は、HTMLタグや特殊文字をエスケープするためのテンプレートタグで、特にユーザー入力の表示時に使われます。サイトのセキュリティを強化し、不正なコード実行を防ぐために欠かせない関数です。
カスタマイズ例
-
タームのメタデータを取得する
WordPressのカスタムタクソノミーやカテゴリーに登録されたタームには、メタデータを追加することが可能です。本記事では、タームのメタデータを取得し、簡単に表示するためのカスタマイズ方法を紹介します。 タームのメタデータを取得する WordPressでは... -
カスタム投稿タイプのタームリストを取得する
まとめ このカスタマイズでは、カスタム投稿タイプに紐づくタームを <li> タグで簡単に表示する方法を紹介しました。ショートコードとして登録することで、記事本文やウィジェットに挿入するなど、幅広い用途で利用できます。