Преобразование туда и обратно из PHP не должно быть проблемой.
Json_encode PHP выполняет правильную кодировку, но переосмысление этого внутри java-скрипта может вызвать проблемы. Нравится
1) исходная строка - [строка с nnn символом новой строки в нем] (где nnn - фактический символ новой строки)
2) json_encode преобразует это в
[строка с новой строкой "\\ n"] (управляющий символ преобразован в "\\ n" - литерал "\ n"
3) Однако, когда вы печатаете это снова в литеральной строке, используя php echo, тогда «\\ n» интерпретируется как «\ n», и это вызывает душевную боль. Потому что JSON.parse будет понимать печатную букву "\ n" как символ новой строки - управляющий символ (nnn)
так, чтобы обойти это: -
A)
Сначала закодируйте объект json в php с помощью json_enocde и получите строку. Затем запустите его через фильтр, который делает его безопасным для использования внутри html и java-скриптов.
В)
используйте строку JSON из PHP как «литерал» и поместите ее в одинарные кавычки вместо двойных.
<?php
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 = <<<END
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);
?>
<!DOCTYPE html>
<html>
<head>
<title> title</title>
<meta charset="utf-8">
<script type="text/javascript" src="/3p/jquery/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(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");
}
});
</script>
</head>
<body>
<h2> Json parsing test page </h2>
<div id="title"> </div>
<div id="description"> </div>
</body>
</html>
Поместите строку в одинарные кавычки в сценарии Java. Помещение строки JSON в двойные кавычки может привести к сбою синтаксического анализа в маркерах атрибута (что-то вроде {"id": "value"}). Никакого другого экранирования не требуется, если вы поставили строку как «литерал» и позволили JSON-анализатору сделать всю работу.