![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
下記の関数は、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で質問しましょう!
似たような質問が見つかりました
- オープンソース Coinmarketcap api 1 2022/05/30 15:47
- Visual Basic(VBA) VBAでfunctionを利用しようとしたときに「引数は省略できません」というエラーが出ます 1 2022/10/15 16:30
- その他(プログラミング・Web制作) laravel 本番環境でメールが送れません。 1 2023/02/17 17:57
- C言語・C++・C# C++のcase文の書き方 4 2023/02/24 20:50
- JavaScript 正規表現について質問です。条件に合う場合はtrueを返したい 3 2022/10/06 23:02
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- C言語・C++・C# スタックフレームの消滅 6 2023/05/20 12:33
- JavaScript JavaScriptの即時関数の書き方 1 2022/11/29 09:52
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
PHPの変数値をリンクさせたい
-
file_existsが動作しない
-
Javascript の関数の引数箇所に...
-
vb作成したらでbeep音が鳴りま...
-
Smarty変数の値をJavascript変...
-
どういうプログラムを関数化を...
-
エラーの理由が分りません。Pri...
-
issetで変数の存在をチェックし...
-
テンプレート引数の型推測
-
VB.NETSystem.Xml 要素数を得る...
-
関数内関数から関数外関数を呼...
-
phpの変数宣言の仕方
-
Dosブロンプトでtabを出力したい
-
switch()文で値の大小比較
-
DTOとEntityの差は何ですか。
-
「取得先」という表現について
-
excel access連携 このテーブル...
-
ファイル名に日付の挿入
-
shシェルスクリプト 空白行の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
classの再定義エラーについて
-
VB6のコンボボックスのテキスト...
-
可変変数にアロー演算子を使いたい
-
PHPでの画像の形式の変換
-
VB.NETSystem.Xml 要素数を得る...
-
protectedなのにアクセスできな...
-
issetで変数の存在をチェックし...
-
vb作成したらでbeep音が鳴りま...
-
どういうプログラムを関数化を...
-
PHPの名前空間インポートについて
-
エラーの理由が分りません。Pri...
-
関数から関数を呼び出したとき...
-
PHP、ヒアドキュメント内でのIF...
-
protectedなのにアクセスできな...
-
PHPの変数値をリンクさせたい
-
PHPプログラム上で「URLを直接...
-
関数の動きと記述方法の意味を...
-
アロー演算子について
おすすめ情報