我看到了一些相关的答案,其中将PHP中的JSON字符串中的特定字符转换为javascript友好版本。在一些帮助下,我已经走了这么远:
下面的示例不工作的json (在jsonlint验证,但在JSON.parse中失败)
["string\r\n next line \"quoted text\" and \b at path \/var\/opt "]我需要在替换后转换为后续,以使其正常工作。
["string next line \\"quoted text\\" and \\b at path /var/opt "]问题
我的问题是,我在php中的json依赖于用户的输入,我不知道他们会提供什么。PHP将使用标准的json转换方法并进行验证。
和上面的情况一样,我还需要介绍其他的场景吗,特别是unicode,其他特殊字符等等?
更新
我的json字符串比这个例子要复杂一些,并且动态变化,一个小例子是
{ "settings.conf": [ "tooltip='dynamic unicode text multiline with \ or \\ or even \" etc '", "value=the value"]}我在做
var jstring = <?php sanitize_json(json_encode($source_array)); ?>
JSON.parse(jstring);而且我的sanitize_json函数目前正在执行反斜杠替换,但是我希望包含换行符\r\n,还需要确保js中的json没有其他类似的问题。
发布于 2014-07-08 20:43:37
如何将Json字符串输入JSON.parse
通过简单地执行以下javascript代码,我遇到了您的问题:
JSON.parse('["string\r\n next line \"quoted text\" and \b at path \/var\/opt "]');但是问题是:虽然JSON字符串是有效的,但它必须在javascript字符串的一部分上下文中转义。实际上,JSON字符串中的每一个反斜杠都是javascript字符串的一部分,包含"\n“的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创建变量就可以了:
var x = ["string\r\n next line \"quoted text\" and \b at path \/var\/opt "];而不是
var x = JSON.parse('["string\r\n next line \"quoted text\" and \b at path \/var\/opt "]');发布于 2014-07-08 19:51:04
如果您看到json_encode() 文档,您将看到可以设置的各种标志来清理数据。在您的例子中,JSON_UNESCAPED_SLASHES可能会做到这一点:
json_encode($data, JSON_UNESCAPED_SLASHES);
https://stackoverflow.com/questions/24640282
复制相似问题