You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP实现可正确解析属性的非WordPress网站BUTTON短代码?

极简短代码转按钮解决方案

你的正则问题在于没有精准区分link和label属性,只是把BUTTON后的所有内容当成href,以下是两种符合你“一两行代码”需求的解决方案:

方案一:灵活处理的回调替换(推荐)

如果属性顺序可能变动或需要兼容可选属性,用preg_replace_callback更稳妥:

$copy = preg_replace_callback('/\[BUTTON(?: link="([^"]+)")?(?: label="([^"]+)")?\]/i', function($m) {
    $link = htmlspecialchars($m[1] ?? '#');
    $label = htmlspecialchars($m[2] ?? 'Button');
    return "<a href=\"$link\" class=\"button\">$label</a>";
}, $copy);
  • 支持属性顺序任意、可选属性(缺省link用#,缺省label用Button)
  • 用htmlspecialchars转义内容,避免XSS注入
  • 忽略大小写(/i修饰符),兼容[button]小写写法

方案二:单行正则替换(属性顺序固定时)

如果短代码严格遵循link在前、label在后的规则,一行代码即可搞定:

$copy = preg_replace('/\[BUTTON link="([^"]+)" label="([^"]+)"\]/', '<a href="$1" class="button">$2</a>', $copy);
  • 直接通过捕获组提取link和label的属性值,替换到对应位置
  • 安全优化版(添加XSS防护):
$copy = preg_replace('/\[BUTTON link="([^"]+)" label="([^"]+)"\]/', '<a href="'.htmlspecialchars('$1').'" class="button">'.htmlspecialchars('$2').'</a>', $copy);

关键说明

  • 正则中的[^"]+用于精准匹配双引号内的属性值,避免误匹配其他内容
  • 给a标签添加class="button"可以方便你用CSS自定义按钮样式

内容的提问来源于stack exchange,提问作者AdamJones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:25:37