从PHP转换来回应该不是问题。
PHP的json_encode执行正确的编码,但重新解释java脚本内部可能会导致问题。喜欢
1)原始字符串 - [带有nnn换行符的字符串](其中nnn是实际的换行符)
2)json_encode将此转换为
[带有“\ n”换行符的字符串](控制字符转换为“\ n” - 文字“ n”
3)然而,当你使用php echo在文字字符串中再次打印时,“\ n”被解释为“ n”,这会引起心痛。因为JSON.parse会将文字印在“ n”作为换行符 - 控制字符(nnn)
所以解决这个问题: -
一个)
首先使用json_enocde在php中编码json对象并获取一个字符串。然后通过一个过滤器运行它,使其可以安全地在html和java脚本中使用。
B)
使用来自PHP的JSON字符串作为“文字”,并将其放在单引号内而不是双引号中。
function form_safe_json($json) {
$json = empty($json) ? '[]' : $json ;
$search = array('\',"n","r","f","t","b","'") ;
$replace = array('\\',"\n", "\r","\f","\t","\b", "'");
$json = str_replace($search,$replace,$json);
return $json;
}
$title = "Tiger's /new \found /freedom " ;
$description = <<
Tiger was caged
in a Zoo
And now he is in jungle
with freedom
END;
$book = new stdClass ;
$book->title = $title ;
$book->description = $description ;
$strBook = json_encode($book);
$strBook = form_safe_json($strBook);
?>
title$(document).ready(function(){
var strBookObj = '<?php echo $strBook; ?>' ;
try{
bookObj = JSON.parse(strBookObj) ;
console.log(bookObj.title);
console.log(bookObj.description);
$("#title").html(bookObj.title);
$("#description").html(bookObj.description);
} catch(ex) {
console.log("Error parsing book object json");
}
});
Json parsing test page
将字符串放在java脚本中的单引号中。将JSON字符串放在双引号内将导致解析器在属性标记处失败(类似于{“id”:“value”})。如果您将字符串设置为“文字”并让JSON解析器完成工作,则不需要其他转义。