Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript &引用;“固定”;来自MySQL的JSON_Javascript_Php_Mysql_Json - Fatal编程技术网

Javascript &引用;“固定”;来自MySQL的JSON

Javascript &引用;“固定”;来自MySQL的JSON,javascript,php,mysql,json,Javascript,Php,Mysql,Json,我正在获取存储在MySQL中的JSON代码,它有额外的斜杠,在我将其打印到页面上之后,为了用JavaScript解析它,我必须删除斜杠。现在我正在做以下工作: $save = str_replace("\n", "<br>", $save); // Replace new line characters with <br> $save = str_replace('\\"', '"', $save); // top-level JSON $save = str_repla

我正在获取存储在MySQL中的JSON代码,它有额外的斜杠,在我将其打印到页面上之后,为了用JavaScript解析它,我必须删除斜杠。现在我正在做以下工作:

$save = str_replace("\n", "<br>", $save); // Replace new line characters with <br>
$save = str_replace('\\"', '"', $save); // top-level JSON
$save = str_replace('\\\\"', '\"', $save); // HTML inside top level JSON
$save = str_replace('\\\\\\\\\\"', '\\\\\"', $save); // HTML inside second level JSON
$save=str\u replace(“\n”,“
”,$save);//将新行字符替换为
$save=str\u replace(“\\\”、“““”、$save);//顶级JSON $save=str\u replace(“\\\\”,“\\”,$save);//顶级JSON中的HTML $save=stru replace('save'),'save);//二级JSON中的HTML
下面是一个示例JSON代码,它来自MySQL:

{\"id\":2335,\"editor\":{\"selected_shape\":\"spot-7488\"},\"general\":{\"name\":\"HTML Test\",\"shortcode\":\"html-test\",\"width\":1280,\"height\":776},\"spots\":[{\"id\":\"spot-7488\",\"x\":9.9,\"y\":22.6,\"default_style\":{\"use_icon\":1},\"tooltip_content\":{\"content_type\":\"content-builder\",\"plain_text\":\"<p class=\\\"test\\\">Test</p>\",\"squares_json\":\"{\\\"containers\\\":[{\\\"id\\\":\\\"sq-container-293021\\\",\\\"settings\\\":{\\\"elements\\\":[{\\\"settings\\\":{\\\"name\\\":\\\"Paragraph\\\",\\\"iconClass\\\":\\\"fa fa-paragraph\\\"},\\\"options\\\":{\\\"text\\\":{\\\"text\\\":\\\"<p class=\\\\\\\"test\\\\\\\">Test</p>\\\"}}}]}}]}\"}}]}
“现场-7488\”,“一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”一般”代码:“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \:代码代码:::“\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \ \ \ \ \ \ \ \,,,,,\\\\\\\\\\\\\\\\\\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \,,,,,,,,,,,,,,,,,,,,,\ \ \ \ \ \ \ \ \ \,,,,,,,\ \ \ \ \ \ \ \ \ U文本\“:\”\ \““,\“广场上的一块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块块测试 下面是为了正确解析它的外观(使用jsonlint.com进行测试):

{id:2335,“编辑器”:{“选定形状”:“spot-7488”},“常规”:{“名称”:“HTML测试”,“快捷码”:“HTML测试”,“宽度”:1280,“高度”:776},“点”:[{“id”:“spot-7488”,“x”:9.9,“y”:22.6,“默认样式”:{“使用图标”:1},“工具提示内容”:{“内容类型”:“内容生成器”,“纯文本”:“测试”

,“json”:{\“sq-container-293021\”,“settings\”:{“elements\”:[{“settings\”:{“name\”:“PARATION\”,“iconClass\”:“fa fa FAPARATION\”},\“options\”:{“text\”:“

test

“}}}}}}}}}}}
请注意,我在JSON中有HTML代码,它在另一个JSON中,这就是它变得有点混乱的地方

我的问题是,是否有一个PHP函数或库(对于JS也可以),它涵盖了所有这些极端情况,因为我相信有人会找到打破脚本的方法


谢谢

这个简短的答案是供您使用的,但它远远不够。这个答案不充分的原因是您的JSON字符串可能已被转义或多次调用addslashes,并且每次发生这种情况时,您必须精确地调用stripslashes一次

正确的解决方案是找出添加斜杠的位置,要么a)避免添加斜杠,要么b)理解斜杠存在的原因并做出相应的响应。我坚信,创建损坏的JSON的过程就是问题所在

在一些情况下,通常在PHP中添加斜杠:

  • 都打开了。这是一个旧的PHP特性,已被删除。其基本思想是,PHP用于自动转义传入请求中的引号,让您只需将传入字符串塞入数据库。你猜怎么着不安全。

  • 已经打过电话了。为什么叫这个?有些人在将数据粘贴到数据库之前,将其用作一种错误的转义数据的方法。其他人使用它来防止HTML在回显变量时中断(可能应该改用htmlspecialchars)。当您在字符串中定义代码时,它还可以在各种其他元情况下派上用场

  • 转义数据输入时。最常见的转义函数是。在将值插入数据库之前对其进行转义是非常重要的,以防止sql注入和其他利用漏洞的行为,但是您不应该两次转义。

因此,有可能是您的代码是双重转义的,或者addslashes被调用,或者类似magic_quotes之类的东西导致了问题,但我怀疑这是另一个问题:一些JS代码可能不是作为正确的JSON字符串提供此JSON,但是一个已经被转义以便在javascript中定义字符串的字符串。

如果您以上面的JSON字符串为例,并在其周围加上引号:

var myJSON = "<put your string here>";

试试斜杠?()尽管如此,如果你有详细的HTML,不能保证某些东西不会被破坏。如果可以的话,你真的需要在源代码处解决这个问题。你说的“在源代码处解决这个问题”是什么意思?你将这个JSON数据插入数据库的过程就是在某个地方添加这些反斜杠。您需要检查捕获JSON的过程并对其进行修改,以确保JSON不会受到干扰。无论我是在数据库之前还是之后修复它,都是一样的。当JSON通过ajax从前端传输到PHP时,仍然会添加斜杠。谁在向JSON添加斜杠,从而使其无效?这些斜杠是在什么阶段添加的?非常简单的解决方案,我应该尝试直接在javascript中解析JSON,而不尝试手动删除斜杠:)我建议您检查这个JSON的输入阶段,看看是否可以首先避免对其进行编码。对JSON.stringify或其他东西的调用可能太多了。当JSON到达PHP时,理想情况下它不应该有所有额外的斜杠。
var myJSON = "<put your string here>";
var myJSON = "{\"id\":2335,\"editor\":{\"selected_shape\":\"spot-7488\"},\"general\":{\"name\":\"HTML Test\",\"shortcode\":\"html-test\",\"width\":1280,\"height\":776},\"spots\":[{\"id\":\"spot-7488\",\"x\":9.9,\"y\":22.6,\"default_style\":{\"use_icon\":1},\"tooltip_content\":{\"content_type\":\"content-builder\",\"plain_text\":\"<p class=\\\"test\\\">Test</p>\",\"squares_json\":\"{\\\"containers\\\":[{\\\"id\\\":\\\"sq-container-293021\\\",\\\"settings\\\":{\\\"elements\\\":[{\\\"settings\\\":{\\\"name\\\":\\\"Paragraph\\\",\\\"iconClass\\\":\\\"fa fa-paragraph\\\"},\\\"options\\\":{\\\"text\\\":{\\\"text\\\":\\\"<p class=\\\\\\\"test\\\\\\\">Test</p>\\\"}}}]}}]}\"}}]}";
console.log(JSON.parse(myJSON)); // this is an actual object
var myObj = {"key":"here is my value"};
console.log(myObj);
var myJSON = JSON.stringify(myObj);
console.log(myJSON);
var doubleEncoded = JSON.stringify(myJSON);
console.log(doubleEncoded);