我正在创建自己的论坛,并坚持从回复中删除多个引用的文本.我将尝试用例子来解释这个.
假设我们收到第一条带有文本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]某事[/ q],这是第一个?- > [q] [q]A[/q] B[/q] -> becomes -> [q]B[/q]或[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);
Run Code Online (Sandbox Code Playgroud)
对于任何错误,我深表歉意,我没有方便测试的 PHP 解释器,而且自从我使用它以来已经有大约 9 个月了,所以我有点生疏了。
实际上,我们尝试做的是,我们首先找到第一个开始标签在字符串中的位置,然后找到最后一个结束标签的位置。一旦我们有了这些位置,我们就可以使用它们作为偏移量来开始搜索,以找到第二个开始标签和倒数第二个结束标签。一旦我们知道了它们的位置,我们就可以使用 substr_replace 将内容字符串中从第二个开始标记到倒数第二个结束标记的所有文本替换为空白字符串。
为了说明这一点,如果我们有:
[q][q]内部 3[q] 内部 2[/q] 内部 1[/q]外部[/q]
我们找到第二个 [q] 标签,倒数第二个 [/q] 标签,并将它们以及它们之间的所有内容替换为空白字符串,并得到:
[q]外部[/q]
这是您要找的吗?