
下記の関数は、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);
}
No.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="/<((a|img|p) .+?|\/(a|p)|p)>/";
$replacement=function($a){return htmlspecialchars_decode($a[0],ENT_QUOTES);};
return preg_replace_callback($pattern,$replacement,$s);
}
ありがとうございます。関数の中に関数という表現は、見たことがなかったので、調べていく過程でとても勉強になりました。感謝いたします。♪
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETからVBAマクロ(引数)を呼...
-
どういうプログラムを関数化を...
-
PHPの名前空間インポートについて
-
エラーの理由が分りません。Pri...
-
[CakePHP] Paginatorのリンクが変
-
可変変数にアロー演算子を使いたい
-
VBA コレクションに2次元配列...
-
try~catch
-
PHPでの画像の形式の変換
-
classの再定義エラーについて
-
WordでExcelデータを差込...
-
Dosブロンプトでtabを出力したい
-
「取得先」という表現について
-
wordの差し込み印刷で文字...
-
バッチファイルでpingの結果を...
-
JavaからPHPへの値の受け渡し
-
shシェルスクリプト 空白行の...
-
【VBA】EXCELブックを開かずに...
-
findstrのerrorlevel
-
Excel VBA:特定の文字列以降(...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
どういうプログラムを関数化を...
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP正規表現の難題・preg_repla...
-
PHPの名前空間インポートについて
-
関数の入れ子ができない。
-
UNIX CP "で上書きしません"
-
配列の操作時にLNK2001外部シン...
-
number_formatが勝手に四捨五入
-
次のhtml・cssでspan内の文字を...
-
外部ファイル(テキスト)を取...
-
Let's Encryptで自動更新がされ...
-
可変変数にアロー演算子を使いたい
-
vb作成したらでbeep音が鳴りま...
-
CakePHPでの自作関数保存場所
-
正規表現に関する質問です。HTM...
-
String変数の文字列の検索方法
-
クラス内で上位クラス内メンバ...
-
Fatal error: Cannot use []
-
ExcelVBAで部分一致(*)をしたい
おすすめ情報