PHP删除所有,但最后引用的回复在论坛


php remove all but last quoted reply in forum

我正在创建自己的论坛,并坚持从回复中删除多个引用文本。我将试着用一个例子来解释这一点。

让我们假设我们收到了第一条带有文本Hello A的消息。

然后有人引用这个,我们得到:[q]Hello A[/q] Hello you too in database.

如果第三人引用第二个回复,它会变得更难看,会是这样的:[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]

如果我理解正确,那么您可能想要这样的内容:

$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替换内容字符串中从第二个开始标记到最后第二个结束标记的所有文本。

为了说明,如果我们有:

[问][问]内心的3[问]2 [/q]内1 [/q]外[/q]

找到第二个[q]标签,最后第二个[/q]标签,用空字符串替换它们和它们之间的所有内容,得到:

[问]外[/q]

这是你要找的吗?