php的json_encode()总是使用双引号作为字符串分隔符吗?

时间:2016-08-19 10:47:36

标签: php json

我有一个包含字符串作为值的php关联数组,我将其编码为JSON并将其存储在html-data属性中。这是由一些JS读取的。

到目前为止一切顺利。

现在,我需要为数据属性使用单引号,否则上下文切换。

<section id="settings" data-settings='{"some":"val"}'>
</section>

问题是,我可以依靠php的json_encode()函数来编码始终使用双引号的字符串吗?令人惊讶的是,我似乎无法找到相关信息。我只查找数组值中带引号问题的人的文章。

提前致谢。

2 个答案:

答案 0 :(得分:6)

是的,正如JSON规范中定义的那样,分隔符始终为"。但是,值可能包含'个字符,这会破坏您的HTML。为了保持简单而不担心可能会或可能不会造成问题, HTML-escape 您的价值观!

<section data-settings="<?= htmlspecialchars(json_encode($foo)); ?>"></section>

无论您输入什么值或如何编码它们,都可以保证始终有效。请注意,htmlspecialchars默认情况下仅编码",而不是';因此,您必须使用"作为HTML中的分隔符(或更改默认的转义行为)。

答案 1 :(得分:0)

双引号只是惯例 - 许多语言中的JSON标准。因此,如果要使用双引号将JSON存储在HTML属性中。你可以编码为

在PHP中

$encoded_json = base64_encode(json_encode($var));

在HTML中

<section id="settings" data-settings='<?=$encoded_json?>'>

在JS中

var variable = JSON.parse(atob(encoded_json));