Laravel 5.8中PHP数组传递给JS时json_encode输出转义引号如何解决
问题原因
- Laravel 框架的
{{ }}输出语法默认会对内容做HTML实体转义,因此json_encode生成的双引号会被转译为",导致JS无法正常识别为数组结构 - 原数组元素存在前导空格(如
" poop"、" feed"),是调用explode分割字符串时残留的格式问题 - 你期望的
[pee,poop,feed]属于无引号数组格式,在JS语法中仅当元素是已声明的变量名时才合法,如果是字符串值,带双引号的["pee","poop","feed"]才是合法的字符串数组结构,并不是格式错误。
解决方法
- 替换输出语法取消HTML转义,Laravel中使用
{!! !!}替代{{ }}输出JSON内容即可保留原生双引号:
console.log({!! json_encode($logEnabled) !!});
- 若需要清理数组元素的多余空格,可在PHP侧分割后做trim处理:
$logEnabled = array_map('trim', explode(',', $baby->logEnabled));
处理后输出的JSON结构为["pee","poop","feed"],JS可以直接识别为正常数组对象使用。
3. 如果你确认需要无引号的数组结构(仅适用于数组值对应JS端已定义变量的场景),可以在PHP侧直接拼接字符串输出:
$jsArray = '[' . implode(',', $logEnabled) . ']';
JS端直接输出即可:
console.log({!! $jsArray !!});
注意:该方式如果用于输出字符串值会触发JS未定义变量报错,非特殊场景不推荐使用。
内容的提问来源于stack exchange,提问作者code-8
相关产品推荐
相关产品推荐

