6

私は自分のフォーラムを作成していますが、返信から複数の引用テキストを削除することに固執しています。これを例で説明しようと思います。

テキストHello Aを含む最初のメッセージを受け取ったとしましょう。

次に、誰かがこれを引用し、次のように取得[q]Hello A[/q] Hello you tooします。データベース内。

そして、第三者が 2 番目の返信を引用すると、それはさらに醜くなり、次のようになります[q] [q]Hello A[/q] Hello you too[/q] Hello both

私がやりたいことは、引用されたテキストから最後に引用された返信以外をすべて削除することです。[q]Hello A[/q]したがって、この場合、3回目の返信で、3回目の引用を取り除きたいと思います。

無制限の [q] で動作させる方法は?

編集: 最初のものであるメイン [q] 内の複数の [q]何か[/q] を置き換える方法は? ->[q] [q]A[/q] B[/q] -> becomes -> [q]B[/q]または[q][q][q]A[/q]B[/q]C[/q] -> becomes -> [q]C[/q]

4

1 に答える 1

0

私が正しく理解していれば、おそらく次のようなものが必要です。

$firstTag = strpos($content, "[q]");
$lastTag = strrpos($content, "[/q]", 0);

$secondTag = strpos($content, "[q]", $firstTag + strlen("[q]"));
$secondLastTag = strrpos(substr($content, 0, $lastTag), "[/q]");

$content = substr_replace($content, "", $secondTag, $secondLastTag - $secondTag + strlen("[q]") + 1);

エラーが発生したことをお詫びします。PHPインタープリターをテストするのに便利ではありません。使用してから約9か月が経過しているため、少し錆びています。

事実上、私たちがやろうとしていることは、最初に最初の開始タグの文字列内の位置を見つけ、最後の終了タグの位置を見つけることです。これらの位置が決まったら、それらをオフセットとして使用して、2番目の開始タグと最後から2番目の終了タグを見つけるための検索を開始できます。これらの位置がわかったら、substr_replaceを使用して、2番目の開始タグから最後から2番目の終了タグまでのコンテンツ文字列内のすべてのテキストを空白の文字列に置き換えます。

たとえば、次のような場合です。

[q][q]インナー3[q]インナー2[/q]インナー1[/q]アウター[/q]

2番目の[q]タグ、最後から2番目の[/ q]タグを見つけ、それらとそれらの間のすべてを空白の文字列に置き換えて、次のようにします。

[q]アウター[/q]

これはあなたが探していたものですか?

于 2013-03-18T11:13:58.817 に答える