wp_specialchars_decode():HTML 用に変えられた記号を元の文字に戻す(WordPress)

wp_specialchars_decode() は、「&amp;」「&lt;」のように HTML 用に変えられた文字を、元の「&」「<」に戻す関数です。WordPress が保存のときに変えた値を、メールの件名やテキストのファイルなど、HTML でない場所で使うときに使います。

書き方

wp_specialchars_decode( string $text, string|int $quote_style = ENT_NOQUOTES ): string
  • $text:戻したい文字列
  • $quote_style:引用符も戻すか。省くと ENT_NOQUOTES(引用符は戻さない)。ENT_QUOTES にすると、ダブルクォート(")とシングルクォート(')も戻す
  • 戻り値:戻したあとの文字列

戻すのは、&・<・>・"・' の 5 つの記号だけです。&amp; のほか、&#038; のような数字の書き方も戻します(作業環境で確かめた結果)。

使い方の例

作業環境(WordPress 7.1.3)で試した結果を、コメントに書いています。

サイトのタイトルをメールの件名に使う

サイトのタイトルに「&」があると、WordPress は「&amp;」の形で保存しています。メールの件名にそのまま使うと「&amp;」と見えるので、戻してから使います。下のコードは使い方の例です。実際は、フォームを送ったときの処理など、メールを送る場面の中で使います(functions.php にそのまま貼ると、ページを開くたびにメールが送られます)。

<?php
// タイトルが Nail & Beauty のサイトで
$name = get_bloginfo( 'name' );
echo $name;                                         // Nail &amp; Beauty
echo wp_specialchars_decode( $name, ENT_QUOTES );   // Nail & Beauty

wp_mail(
	get_option( 'admin_email' ),
	sprintf( '%s にお問い合わせがありました', wp_specialchars_decode( $name, ENT_QUOTES ) ),
	'本文'
);

ENT_QUOTES を付けないと、引用符が戻らない

<?php
echo wp_specialchars_decode( '&quot;x&quot; &#039;y&#039;' );             // &quot;x&quot; &#039;y&#039;(そのまま)
echo wp_specialchars_decode( '&quot;x&quot; &#039;y&#039;', ENT_QUOTES ); // "x" 'y'

サイトのタイトルや記事のタイトルには引用符が入ることもあるので、ENT_QUOTES を付けておくと安心です。

html_entity_decode() との違い

PHP の html_entity_decode() は、「&copy;」(©)のような、ほかの記号の書き方もすべて戻します。wp_specialchars_decode() は、5 つの記号だけを戻します。

入れた文字 結果
wp_specialchars_decode( '&copy; &amp;', ENT_QUOTES ) &copy; &(© は戻らない)
html_entity_decode( '&copy; &amp;', ENT_QUOTES, 'UTF-8' ) © &

WordPress が保存のときに変えたもの(esc_html() などで変わるもの)を戻すだけなら、wp_specialchars_decode() で足ります。

気をつけること

  • 戻した値を、そのまま HTML に出さない。「<」などが元に戻っているので、HTML に出すと、タグとして動いてしまうことがあります。HTML に出すときは、戻す前の値を使うか、esc_html() を通します。
  • メールの件名・プレーンテキストのメール・CSV・JSON の中の文字など、「HTML でない場所」で使うための関数です。

関係する関数

逆引きリファレンスの一覧へ

サイドバー

よく使うカスタマイズ

最近の記事

Profile

PAGE TOP