dポイントプレゼントキャンペーン実施中!

下記の関数は、gooの別のトピックで教えていただいたものです。関数の入れ子になっています。 htmlspecialchars関数でエスケープした後の処理になりますが、 img と a のタグを許可する関数です。$patternで指定した後に、$replacementに、htmlspecialchars_decode関数でディコードしたものを指定しています。 実行すると、 Catchable fatal error: Object of class Closure could not be converted to string in~ で最後のreturnの句が指摘されます。 原因が分からなかったので質問してみました。よろしくお願いします。

function s($s){
$pattern="/<((a|img|p) .+?|\/(a|p)|p)>/";
$replacement=function($a){return htmlspecialchars_decode($a[0],ENT_QUOTES);};
return preg_replace($pattern,$replacement,$s);
}

A 回答 (1件)

混乱させて申し訳ない、転記ミス


preg_replace()→preg_replace_callback()

<?PHP
$s=<<<eof
<a href="test">test a</a>
<span class="hoge">test span</span>
<br>
<img src="hoge" alt="hoge">test img
<hr>
<p id="hogep">test p1</p>
<p>test p2</p>
eof;
print $s;
print "\n<hr>\n";
$s=h($s);
print $s;
print "\n<hr>\n";
$s=s($s);
print $s;
print "\n<hr>\n";
function h($s) {
return htmlspecialchars($s, ENT_QUOTES, 'utf-8');
}

function s($s){
$pattern="/&lt;((a|img|p) .+?|\/(a|p)|p)&gt;/";
$replacement=function($a){return htmlspecialchars_decode($a[0],ENT_QUOTES);};
return preg_replace_callback($pattern,$replacement,$s);
}
    • good
    • 0
この回答へのお礼

ありがとうございます。関数の中に関数という表現は、見たことがなかったので、調べていく過程でとても勉強になりました。感謝いたします。♪

お礼日時:2016/06/02 13:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!