6

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

假设我们收到了第一条带有文本Hello 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]something[/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 个月了,所以我有点生疏了。

实际上,我们尝试做的是首先找到第一个开始标签的位置,然后找到最后一个结束标签的位置。一旦我们有了这些位置,我们就可以将它们用作偏移量来开始我们的搜索,以找到第二个开始标签和倒数第二个结束标签。一旦我们知道了它们的位置,我们就使用 substr_replace 将内容字符串中的所有文本替换为从第二个开始标记到倒数第二个结束标记的空白字符串。

为了说明,如果我们有:

[q][q]内3[q]内2[/q]内1[/q]外[/q]

我们找到第二个 [q] 标记,倒数第二个 [/q] 标记,并将它们以及它们之间的所有内容替换为空白字符串并得到:

[q]外[/q]

这是你要找的吗?

于 2013-03-18T11:13:58.817 回答