
下記の関数は、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ランキング
-
関数の入れ子ができない。
-
外部ファイル(テキスト)を取...
-
正規表現 ファイル名の取得
-
number_formatが勝手に四捨五入
-
正規表現に関する質問です。HTM...
-
C++ 共変 戻り値について
-
Let's Encryptで自動更新がされ...
-
どういうプログラムを関数化を...
-
String変数の文字列の検索方法
-
クラス内で上位クラス内メンバ...
-
ユーザー関数の外の変数は呼べ...
-
こういう事できますか?
-
Fatal error: Cannot use []
-
ファイルのフルパス splite?In...
-
.htaccessについて
-
静的多態性と動的多態性の共存...
-
コマンドプロンプト echo onで...
-
日付の比較
-
グーグルページランクの取得方法
-
PHPのプロセス滞留について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA コレクションに2次元配列...
-
VB.NETからVBAマクロ(引数)を呼...
-
PHP、ヒアドキュメント内でのIF...
-
エラーの理由が分りません。Pri...
-
どういうプログラムを関数化を...
-
可変変数にアロー演算子を使いたい
-
protectedなのにアクセスできな...
-
PHPの名前空間インポートについて
-
ASPのResponse.WriteをPHPでは...
-
[C++]std:mapの扱いを教えて頂...
-
vb作成したらでbeep音が鳴りま...
-
PHPの変数値をリンクさせたい
-
次のhtml・cssでspan内の文字を...
-
既存関数の上書き
-
classの再定義エラーについて
-
[C#]Arraylistに追加した構造体...
-
.htaccessについて
-
共用体のサイズをsizeofで
-
PHPで呼び出し元の関数名の取得...
-
PHPでの画像の形式の変換
おすすめ情報