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