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

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>");
?>

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

&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

<?php
	echo '<div data-test="' . esc_attr('<p>MYTH & ROID</p>') . '">属性のテスト</div>';
?>

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

<div data-test="&lt;p&gt;MYTH &amp; ROID&lt;/p&gt;">属性のテスト</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&#038;test&#039;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 &amp; 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 &amp; ROID</a><br>JINGO JUNGLEalert("test");

 

【参考サイト】

 

このエントリーをはてなブックマークに追加

関連記事

コメントを残す

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

CAPTCHA


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

2024年11月
 12
3456789
10111213141516
17181920212223
24252627282930