2013-03-18 56 views
6

我創建了我自己的論壇,並堅持從回覆中刪除多個引用文本。我會試着用例子來解釋這一點。php刪除除了最後在論壇中引用的回覆

比方說,我們得到第一條消息與文本你好A

然後有人引用這個,我們得到:[q]Hello A[/q] Hello you too在數據庫中。

如果第三人引用第二個回覆則會變得更加難看,如下所示:[q] [q]Hello A[/q] Hello you too[/q] Hello both

我想要做的是從引用文本中除去最後引用的所有回覆。所以在這種情況下在第三個答覆我想剝去[q]Hello A[/q]裏面第三個報價。

如何讓它在無限[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]用單個 – 2013-03-18 10:31:01

+0

代替雙倍,結束[/ q]怎麼辦?我認爲我需要某種preg_replace功能,但是我很糟糕.. – fshock 2013-03-18 11:07:24

回答

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個月,所以我有點生疏。

實際上,我們試圖做的是,我們首先在第一個開始標籤的字符串中找到位置,然後找到最後一個結束標籤的位置。一旦我們有了這些位置,我們可以使用它們作爲偏移來開始我們的搜索,找到第二個開始標記和第二個結束標記。一旦我們知道了這些位置,然後我們使用substr_replace從第二個開始標記開始將內容字符串中的所有文本替換爲空白字符串的第二個結束標記。

因此,爲了舉例說明,如果我們有:

[Q] [Q]內部3 [Q]內2/Q]內1/Q]外[/ Q]

我們發現第二[q]標籤,倒數第二個[/ q]標記,並用一個空字符串替換它們,一切都與他們之間獲得:

[q]外[/ q]

這就是你正在尋找?

+0

你的代碼中有混合的Q和P,即使我放棄了這些,我仍然返回相同的內容。 – fshock 2013-03-18 11:45:20

+0

對不起,編輯更正。首先要檢查的是字符串中標籤位置的值是正確的。如果firstTag,secondTag,lastTag和secondLastTag指向字符串中的正確位置,那麼我們至少知道這個位是可以的。你能先檢查一下嗎? – Xefan 2013-03-18 12:05:35

+0

立即嘗試代碼,strrpos似乎沒有像負偏移記錄一樣工作,加上我沒有正確的反正。此代碼現在可以在http://sandbox.onlinephpfunctions.com/上正常工作。 – Xefan 2013-03-18 12:16:05