2013-03-18 2 views
6

私は自分のフォーラムを作成しており、複数の引用されたテキストを返信から削除することに固執しています。これを例を使って説明しようとします。phpフォーラムで最後に引用された返信をすべて削除します。

テキストの最初のメッセージがあるとします。こんにちはAです。

誰かがこれを引用すると、データベースに[q]Hello A[/q] Hello you tooが表示されます。

第三者が2回目の返信を引用すると、それはもっと醜くなり、[q] [q]Hello A[/q] Hello you too[/q] Hello bothのようになります。

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

無制限[q]で作業するにはどうすればいいですか?

編集:最初のメイン[q]内の複数[q]何か[/ q]を交換するには? - >[q] [q]A[/q] B[/q] -> becomes -> [q]B[/q] OR [q][q][q]A[/q]B[/q]C[/q] -> becomes -> [q]C[/q]

+0

[q] [q] - [q] doubleを単一の –

+0

に置き換え、終了[/ q]についてはどうしますか?私はいくつかの種類のpreg_replace関数が必要だと思いますが、私はそれが悪いです。 – fshock

答えて

1

私が正しく理解している場合は、その後、あなたはおそらくこのような何かしたい:すべてのエラーのため

$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]

を我々は見つけます二[Q]タグ、最後から二番目[/ Q]タグ、およびそれらを交換し、空の文字列とそれらの間のすべてのものとget:

を[Q]表地[/ Q]

は何本です探していた?

+0

コード内にQとPが混在していても、それらを再読み込みしても、私は同じ内容を返します。 – fshock

+0

申し訳ありませんが、修正されました。最初にチェックするのは、文字列内のタグ位置の値が正しいことです。 firstTag、secondTag、lastTag、およびsecondLastTagが文字列内の正しい位置を指している場合、このビットは大丈夫です。これを最初に確認できますか? – Xefan

+0

今、コードを試してください。strrposは負のオフセットで文書化されているようには動作していないようですが、とにかく正しかったです。このコードはhttp://sandbox.onlinephpfunctions.com/で正常に動作していたようです。 – Xefan

関連する問題