如果值中包含 space,PHP 会破坏数组值

PHP breaks an array value if value has a space in it

我在 Twig 模板中调用了一个 PHP 函数,例如:

{{ test({"data":{"event":"content interactions", "action":"clicked: bookmark"}}) }}

我将数组传递给 PHP 方法以构建最终字符串:

function test($attributes): string
{
    $result = '';
    foreach ($attributes['data'] as $key => $value) {
        $result.=' data-attr-'.$key.'='.$value;
    }
    return $result;
}

预期的 $result 将是: data-attr-action="content interactions" data-attr-action="clicked: bookmark" 但是由于某种原因 PHP 如果其中有 space 就会破坏 $value,返回 data-ga-event="content" interactions="" data-ga-action="clicked:" bookmark=""

我的问题是什么导致 space 被视为新行?如果 $value 是一个没有 space 的字符串,那么整个概念就很好用——但不幸的是我不能保证这一点。

您的函数中缺少双引号似乎是导致此问题的原因。 没有它们,实际结果是

data-attr-event=content interactions data-attr-action=clicked: bookmark

这让处理器感到困惑,因为不清楚下一个 属性 从哪里开始,因为数据属性本身已经被空格分开了

尝试

function test($attributes): string
{
    $result = '';
    foreach ($attributes['data'] as $key => $value) {
        $result.=' data-attr-'.$key.'="'.$value.'"';
    }
    return $result;
}