首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中使用PHP生成的JSON :反斜杠问题

问在javascript中使用PHP生成的JSON :反斜杠问题
EN

Stack Overflow用户
提问于 2014-07-08 19:32:51
回答 2查看 794关注 0票数 0

我看到了一些相关的答案,其中将PHP中的JSON字符串中的特定字符转换为javascript友好版本。在一些帮助下,我已经走了这么远:

  • Javascript不能很好地处理反斜杠,实际上需要用双反斜杠代替这些反斜杠。
  • 新的行字符\r\n不能正常工作,要么需要回车,要么完全删除符号。
  • 字符串中的双引号需要用“双反斜杠”转义,而不是单引号。
  • 在路径中用反斜杠转义的正斜杠不需要转义。

下面的示例不工作的json (在jsonlint验证,但在JSON.parse中失败)

代码语言:javascript
复制
["string\r\n next line \"quoted text\" and \b at path \/var\/opt "]

我需要在替换后转换为后续,以使其正常工作。

代码语言:javascript
复制
["string next line \\"quoted text\\" and \\b at path /var/opt "]

问题

我的问题是,我在php中的json依赖于用户的输入,我不知道他们会提供什么。PHP将使用标准的json转换方法并进行验证。

和上面的情况一样,我还需要介绍其他的场景吗,特别是unicode,其他特殊字符等等?

更新

我的json字符串比这个例子要复杂一些,并且动态变化,一个小例子是

代码语言:javascript
复制
{ "settings.conf": [ "tooltip='dynamic unicode text multiline with \ or \\ or even \" etc '", "value=the value"]}

我在做

代码语言:javascript
复制
var jstring = <?php sanitize_json(json_encode($source_array)); ?>

JSON.parse(jstring);

而且我的sanitize_json函数目前正在执行反斜杠替换,但是我希望包含换行符\r\n,还需要确保js中的json没有其他类似的问题。

EN

回答 2

Stack Overflow用户

发布于 2014-07-08 20:43:37

如何将Json字符串输入JSON.parse

通过简单地执行以下javascript代码,我遇到了您的问题:

代码语言:javascript
复制
JSON.parse('["string\r\n next line \"quoted text\" and \b at path \/var\/opt "]');

但是问题是:虽然JSON字符串是有效的,但它必须在javascript字符串的一部分上下文中转义。实际上,JSON字符串中的每一个反斜杠都是javascript字符串的一部分,包含"\n“的javascript字符串将将其转换为换行符。因此,写入内存的数据不是源代码中看到的文本。

代码语言:javascript
复制
var x = '["string\\r\\n next line \\"quoted text\\" and \\b at path \\/var\\/opt "]';
alert(x); // should show the original JSON string
JSON.parse(x); // should work perfect then

因此,您的问题只是从“如何在PHP中创建有效的JSON字符串”转换为“如何正确地将正确创建的JSON字符串( json_encode()在PHP中的结果)放入我的Javascript代码中?”

我们需要您在这里提供更多的细节,因为我要说,直接从JSON创建变量就可以了:

代码语言:javascript
复制
var x = ["string\r\n next line \"quoted text\" and \b at path \/var\/opt "];

而不是

代码语言:javascript
复制
var x = JSON.parse('["string\r\n next line \"quoted text\" and \b at path \/var\/opt "]');
票数 2
EN

Stack Overflow用户

发布于 2014-07-08 19:51:04

如果您看到json_encode() 文档,您将看到可以设置的各种标志来清理数据。在您的例子中,JSON_UNESCAPED_SLASHES可能会做到这一点:

json_encode($data, JSON_UNESCAPED_SLASHES);

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24640282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档