好的,我一直在为我的论坛中的 bbcode 样式标签进行一组字符串替换,替换[b]
等[i]
相当简单,因为我可以直接替换它们而不会出现问题。
有两个标签给我带来了问题,因为我需要对它们做的事情更复杂。[quote]
and[url]
很好,但是,我想让用户选择[quote=person_to_quote]
and [url=URL]link text[/url]
,[quote=]
标签也需要能够嵌套!
所以我需要能够替换开始标签[quote=
,然后保留字符串添加]
显示引号,然后结束[/quote]
. 我可以批发替换标签并保留=person
罚款,但这是通过我作弊和简单地将结束标签添加到文本来完成的。我真正想做的是将所有内容拉到=
并]
存储它,以便我可以单独操作它。
目前我正在使用一个数组并简单地替换内联文本:
"[quote=" is replaced by "<span class=\"quote\">[Quote: ",
并且只是将未替换的文本重新放在它的末尾,但这很丑陋。我想做的就是把代码[quote=person]some text here[/quote]
变成:
"[quote=" is replaced by "<span class=\"quote\">$person says: ",
其中 $person 将是一个存储人名的变量,因此可以动态替换它。
与我想替换[url=link]link text[/url]
并使其能够接受 url 并将其替换为内联的 URL 类似,因此输出为:
"[url=" is replaced by "<a href=$URL>"
html标签已经关闭,这意味着剥离url,存储它然后替换它。
那么我用什么方法来删除=
和结束]
标签之间的文本,这样我传入替换数组的内容就可以被传递出去并进行相应的修改。此外,我不担心嵌套在quotes
span 类样式中,但我确实需要一个可以处理任意数量的引号标签的函数!请思考。
编辑:
只是一个更新,我已经解决了我想做的事情,我修改了 webbiedave 给我的代码并且它有效:
$output = preg_replace_callback(
'/\[quote=([^\]]+)?\]/',
create_function(
'$matches',
'return \'<span class="quote">\'.$matches[1].\' says: \';'
),
$comment);
然后无论如何都会通过我的正常标签替换搜索来获取关闭标签。