WordPressで出力する値をエスケープする

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
&lt;p class=&quot;test&quot;&gt;MYTH &amp; ROID&lt;/p&gt;
&lt;script&gt;alert(&#039;test&#039;);&lt;/script&gt;

 

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="&lt;p&gt;MYTH &amp; ROID&lt;/p&gt;">属性のテスト</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="https://cly7796.net/blog/' . esc_url("cms/escape-in-wordpress/") . '">リンク</a>';
    echo '<a href="' . esc_url("../cms/escape-in-wordpress/") . '">リンク</a>';
?>

出力結果はそれぞれ以下のようになります。

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 &amp; 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
<a href="http://www.mythd-club.com/">MYTH &amp; ROID</a><br>JINGO JUNGLEalert("test");

 

【参考サイト】

 

関連記事

コメントを残す

メールアドレスが公開されることはありません。
* が付いている欄は必須項目です

CAPTCHA


コメントが承認されるまで時間がかかります。

2025年4月
 12345
6789101112
13141516171819
20212223242526
27282930