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

PHP如何从带引号字符串中提取包含等号、空格的属性键值对?

你遇到的属性值丢失问题,是因为拆分键值时explode('=', $item)没有限制拆分次数,会把属性值内部的等号也作为分隔符拆分,仅取了拆分后的第二个元素,导致等号后的内容丢失。下面提供两种可直接使用的修改方案:


方案1:仅修改键值拆分逻辑,不改动原有正则

只需给explode增加第三个参数限制拆分次数为2即可,保证第一个等号后的所有内容都归为属性值:

$args = preg_split('/"[^"]+"(*SKIP)(*F)|\h+/', $shortcode);
   
$attrs = [];
foreach( $args as $item )
{
    //仅处理数组$args中包含等号的元素
    if ( strpos( $item , '=' ) !== false )
    {
        // 限制最多拆分为2段,避免值内部的等号被拆分
        $sep = explode( '=', $item, 2 );
        $key = $sep[0];
        $value = $sep[1];
        $attrs[$key] = str_replace( '"', '', $value );
    }
}

方案2:直接匹配键值对(更稳定,无需拆分步骤)

不用提前拆分整个短代码,直接通过正则匹配所有属性键值对,容错性更高:

// 直接匹配所有 属性名="属性值" 结构
preg_match_all('/(\w+)\s*=\s*"([^"]*)"/', $shortcode, $matches);
$attrs = array_combine($matches[1], $matches[2]);

两种方案都可以得到你期望的输出结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:48:01