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

AlpineJS内联x-data使用Laravel @json传递PHP变量的问题

最优解决方案:使用JSON_HEX_QUOT参数修饰@json输出

你遇到的冲突本质是@json默认输出的字符串中包含的双引号会和x-data外层包裹的双引号提前闭合,只需要给@json添加JSON_HEX_QUOT参数即可完美解决,该方案兼容所有PHP变量类型(字符串、布尔值、数组、对象等),无需修改现有内联写法。

示例代码:

@php
$test = "Hello World's testing";
// 支持任意类型变量,比如数组
// $test = ['name' => '测试', 'status' => true];
@endphp

<div x-data="{
    message: @json($test, JSON_HEX_QUOT)
}">
    <span x-text="message"></span>
</div>

JSON_HEX_QUOT是PHP原生json_encode的内置常量,作用是将JSON输出中的所有双引号转换为十六进制转义序列\u0022,不会触发HTML属性外层双引号的闭合逻辑,AlpineJS在解析时会自动将转义序列还原为正常的双引号,完全不影响变量的实际取值。

你当前使用的反引号方案存在潜在风险:如果PHP变量输出的JSON内容中包含反引号或者${字符,会被识别为ES6模板字符串的闭合标记或插值语法,导致JS语法错误,稳定性远不如JSON_HEX_QUOT`方案。

备选方案:外层用单引号包裹x-data,配合JSON_HEX_APOS参数

如果你的场景更适合用单引号包裹x-data属性,只需要把参数换成JSON_HEX_APOS即可转义所有单引号,避免冲突:

<div x-data='{
    message: @json($test, JSON_HEX_APOS)
}'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:36:03