json_encode()给出了'\ n'之类的特殊字符。如何在PHP中替换它们?

时间:2015-10-25 17:39:52

标签: javascript php json

我使用XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser(); parser.setInput(new BufferedReader( new InputStreamReader( new URL("http://.....").openConnection().getInputStream() ) ) ); while(XmlPullParser.END_DOCUMENT != parser.next()){ if(XmlPullParser.START_TAG == parser.getEventType()){ String tagName = parser.getName(); if(parser.getAttributeCount() > 0 { // parse attributes, if needed } if(parser.nextToken() == XmlPullParser.TEXT){ String tagValue = parser.getText() } // etc. } } 函数编码了一个数组,它给了我一个像这样的字符串..

json_encode()

你可以看到它包含像“\ n”这样的特殊字符..我希望这些特殊字符替换为"[{"details":"power - 2000w \nac-220-240v \/ 50-60hz\n369 degree cordless base\n","model_id":"MC-EK3428 \/ MC-EK3328"}]" ,因为在""我使用的是javascript函数将此字符串转换为对象.. 但它给了我一个错误

JSON.parse();

我认为这是因为字符串中的特殊字符..我可以逃避这些吗?

修改

syntaxerror : missing ) after argument list

更新:

发现错误在此:

php :
$view->jsonencoded_array = json_encode($array);
javascript :
var products = JSON.parse('<?php echo $jsonencoded_array; ?>');//this line gives me the error 

3 个答案:

答案 0 :(得分:2)

这里的问题是\n(和其他各种组合)在JavaScript字符串中具有特殊含义,并且您将JSON转储到JavaScript字符串中,而不对这些字符进行任何转换。

由于JSON受JavaScript文字语法的启发,因此您可以使用json_encode将PHP字符串转换为JavaScript字符串。

有一些问题,主要问题是</script>可以出现在JSON文本中而不会导致任何问题,但是在JavaScript <script>元素的中间使用它会导致HTML解析器在字符串中间切断你的JavaScript ...但是PHP的默认编码规则将生成<\/script>来解决这个问题。

所以:

<?php
$json_array = json_encode($array);
$javascript_string = $json_encode($json_array);
?>
var products = JSON.parse(<?php echo $javascript_string; ?>);

那就是说。 JSON数组也是一个JavaScript数组,因此您可以完全跳过该步骤。

<?php
$json_array = json_encode($array);
?>
var products = <?php echo $json_array; ?>;

答案 1 :(得分:1)

在JavaScript中进行解析时,您必须缺少某些内容或存在其他原因导致您的问题;因为json_encode处理\n和其他特殊字符" \等非常好,并且在没有任何明确工作的情况下正确地逃避它们。

我建议你查看生成的JSON,然后提供给JavaScript,看看是否有遗漏。

注意:您可以执行str_replace但不建议这样做。因为它的标准功能更好地坚持json_encode并且效果很好。

修改 您应该回显$view->jsonencoded_array而不仅仅是$jsonencoded_array,不需要解析已经存在的JSON对象。

php:

$view->jsonencoded_array = json_encode($array);

javascript:

var products = <?php echo $view->jsonencoded_array; ?>;

答案 2 :(得分:-1)

json_encode()两次帮助我解决了这个问题。

$view->jsonencoded = json_encode(json_encode($array));