
下記の関数は、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ランキング
-
ASPのResponse.WriteをPHPでは...
-
PHP正規表現の難題・preg_repla...
-
fwriteで改行出来ない
-
VBA コレクションに2次元配列...
-
どういうプログラムを関数化を...
-
UNIX CP "で上書きしません"
-
PHPの名前空間インポートについて
-
file_existsが動作しない
-
classの再定義エラーについて
-
vb作成したらでbeep音が鳴りま...
-
VB.NETからVBAマクロ(引数)を呼...
-
次のhtml・cssでspan内の文字を...
-
Let's Encryptで自動更新がされ...
-
PHPでの画像の形式の変換
-
PHP、ヒアドキュメント内でのIF...
-
Dosブロンプトでtabを出力したい
-
「取得先」という表現について
-
バッチファイルでpingの結果を...
-
switch()文で値の大小比較
-
EXCEL、マクロ-改ページ行番号...
マンスリーランキングこのカテゴリの人気マンスリー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での画像の形式の変換
おすすめ情報