WordPressでエスケープ処理をする方法がいくつかあるようだったので、よく使いそうなものを試してみました。
esc_html()
esc_html()は<、>、&、"、'をエンコードします。
文字列を表示する場合、基本的にesc_html()を使用します。
PHP
<?php echo esc_html('<p class="test">MYTH & ROID</p>'); echo esc_html("<script>alert('test');</script>"); ?>
出力結果はそれぞれ以下のようになります。
<p class="test">MYTH & ROID</p> <script>alert('test');</script>
esc_attr()
esc_attr()はesc_html()と挙動が同じで、<、>、&、"、'をエンコードします。
HTML要素の属性値を出力する場合に使用します。
PHP
<?php echo '<div data-test="' . esc_attr('<p>MYTH & ROID</p>') . '">属性のテスト</div>'; ?>
出力結果は以下のようになります。
<div data-test="<p>MYTH & ROID</p>">属性のテスト</div>
esc_url()
esc_url()はプロトコルのチェックや適切でない文字を除去して、URLを無害化します。
文字列で出力する場合や、HTML要素の属性値として使用する場合などで使用します。
PHP
<?php echo '<a href="' . esc_url("https://cly7796.net/blog/?key=param&test's=hoge") . '">リンク</a>'; echo '<a href="https://cly7796.net/blog/' . esc_url("cms/escape-in-wordpress/") . '">リンク</a>'; echo '<a href="' . esc_url("../cms/escape-in-wordpress/") . '">リンク</a>'; ?>
出力結果はそれぞれ以下のようになります。
<a href="https://cly7796.net/blog/?key=param&test's=hoge">リンク</a> <a href="https://cly7796.net/blog/http://cms/escape-in-wordpress/">リンク</a> <a href="http://../cms/escape-in-wordpress/">リンク</a>
2つ目と3つ目のサンプルのように、文字列や相対パスでは使用できません。
wp_strip_all_tags()
wp_strip_all_tags()はscriptやstyleを含む全てのHTMLタグを除去します。
PHP
<?php echo wp_strip_all_tags('<a href="http://www.mythd-club.com/" target="_blank">MYTH & ROID</a><br>JINGO JUNGLE<script>alert("test");</script>'); ?>
出力結果は以下のようになります。
MYTH & ROIDJINGO JUNGLE
wp_kses_post()
wp_kses_post()は投稿や固定ページで許可されるHTMLタグ以外を除去します。
PHP
<?php echo wp_kses_post('<a href="http://www.mythd-club.com/" target="_blank">MYTH & ROID</a><br>JINGO JUNGLE<script>alert("test");</script>'); ?>
出力結果は以下のようになります。
<a href="http://www.mythd-club.com/" target="_blank">MYTH & ROID</a><br>JINGO JUNGLEalert("test");
wp_kses()
wp_kses()は指定したHTMLタグ以外を除去します。
第一引数に文字列、第二引数に許可するタグを指定します。
PHP
<?php // 許可するタグ $param = array( 'a' => array( // 属性も残す場合は指定が必要 'href' => array(), ), 'br' => array(), ); echo wp_kses('<a href="http://www.mythd-club.com/" target="_blank">MYTH & ROID</a><br>JINGO JUNGLE<script>alert("test");</script>', $param); ?>
出力結果は以下のようになります。
<a href="http://www.mythd-club.com/">MYTH & ROID</a><br>JINGO JUNGLEalert("test");
【参考サイト】
- WordPressで使うエスケープの関数について | memocarilog
- WordPress » WordPressでechoする文字を適切にエスケープする | MORILOG
- WordPressで指定したタグをエスケープさせない方法 | webOpixel
- データ検証 – WordPress Codex 日本語版
- 関数リファレンス/esc html – WordPress Codex 日本語版
- 関数リファレンス/esc attr – WordPress Codex 日本語版
- 関数リファレンス/esc url – WordPress Codex 日本語版
- 関数リファレンス/wp strip all tags – WordPress Codex 日本語版
- 関数リファレンス/wp kses post – WordPress Codex 日本語版
- 関数リファレンス/wp kses – WordPress Codex 日本語版
コメントが承認されるまで時間がかかります。