PHP で作成された Web サイトで、自分の個人的なフォーラム用に Quote 関数を作成しました。
タグで引用されたメッセージは のように見える[quote=username]message[/quote]
ので、その関数を書きました:
$str=preg_replace('#\[quote=(.*?)\](.*?)\[/quote\]#is', '<div class="messageQuoted"><i><a href="index.php?explore=userview&userv=$1">$1</a> wrote :</i>$2</div>', $str);
これは、引用が1つの場合に機能しますが、ユーザーが引用を引用すると、これは機能しません。したがって、この動作を適用するには、一種の再帰的な引用が必要です。
非常に多くのトピックを検索しようとしましたが、どのように機能するのかよくわかりません。この種の操作を行うための提案/ヒントをいただければ幸いです。教えてください、ありがとう!
編集
最後に、これは私自身の解決策です:
if(preg_match_all('#\[quote=(.*?)\](.*?)#is', $str, $matches)==preg_match_all('#\[/quote\]#is', $str, $matches)) {
array_push($format_search, '#\[quote=(.*?)\](.*?)#is');
array_push($format_search, '#\[/quote\]#is');
array_push($format_replace, '<div class="messageQuoted"><a class="lblackb" href="index.php?explore=userview&userv=$1">$1</a> wrote :<br />$2');
array_push($format_replace, '</div>');
}
$str=preg_replace($format_search, $format_replace, $str);
出現回数が正しい場合にのみ補充されます。したがって、html の破損やその他の悪意のある攻撃を防ぐ必要があります (そうですか?)。どう思いますか?