javascript - 尝试使用转义单引号解析 JSON 时,Javascript 中出现“意外标识符”错误
问题描述
在我的 Laravel 应用程序中,我将 JSON 对象传递给 Vue 组件:
<search v-bind:library="'{{ json_encode(language_library()) }}'"></search>
language_library()
,出于测试目的,只返回一行:
{"you_dont_have_subscription":"You don\\'t have an active subscription right now."}
如您所见,字符串中的单引号被转义了。但是,Vue 会抛出这个错误:
[Vue warn]: Error compiling template:
invalid expression: Unexpected identifier in
'{"you_dont_have_subscription":"You don\\'t have an active subscription right now."}'
Raw expression: v-bind:library="'{"you_dont_have_subscription":"You don\\'t have an active subscription right now."}'"
我不明白为什么会发生这个问题。它是双引号内的单引号,它也被转义(addslashes()
在 PHP 后端使用)。如果不是这样,我如何在我的 JSON 中拥有一个包含引号的字符串?
如果,而不是addlahes,我手动做这样的事情......
str_replace("'", "\'", $string)
...我仍然得到同样的错误,在 JSON 中的引号前面有两个反斜杠。
解决方案
您只需编写search
如下示例中的标签:
<search v-bind:library="'{{ json_encode(language_library(), JSON_HEX_QUOT | JSON_HEX_APOS) }}'"></search>
- JSON_HEX_APOS: 所有 ' 都转换为 \u0027。
- JSON_HEX_QUOT: 所有 " 都转换为 \u0022。
编辑
根据Laravel 文档的示例,您应该删除单引号。
<option {{ $isSelected($value) ? 'selected="selected"' : '' }} value="{{ $value }}">
{{ $label }}
</option>
所以你的搜索标签会变成这样:
<search v-bind:library="{{ json_encode(language_library(), JSON_HEX_QUOT | JSON_HEX_APOS) }}"></search>
// or you could declare a variable and assign `json_encode` to it
<?php $json = json_encode(language_library(), JSON_HEX_QUOT | JSON_HEX_APOS); ?>
<search v-bind:library="{{ $json }}"></search>
推荐阅读
- vue.js - 如何在 Chart JS 中的饼图标签上避免 NaN
- angular - 如何更改 ElectronJS 应用程序的默认图标?
- php - Xdebug 应该减慢每个请求的速度吗?
- python - 列表值替换未按预期工作
- android - 如何编写firebase安全规则,例如如果用户发布帖子然后只有他和管理员可以写入其余用户只能阅读它?
- python - 将数据连续添加到python中的csv文件
- javascript - 无法从 VueJS 中的 props 中 require() 变量路径
- python - Python非阻塞通知/消息
- java - 我有以下两种在 Java 中声明整数数组的不同方法,一种有效,一种无效,为什么?
- javascript - 在javascript中使用for循环内的switch case验证表单字段