Converting to and fro from PHP should not be an issue.
PHP's json_encode does proper encoding but reinterpreting that inside java script can cause issues. Like
1) orijinal dize - nnn gerçek satır karakteri () [ona nnn yeni satır ile dize]
2) json_encode will convert this to
[string with "\\n" newline in it] (control character converted to "\\n" - Literal "\n"
Kullanarak bir sabit dize yine bu yazdırırken 3) Ancak php "\ \ n" sonra echo "\ n" olarak yorumlanır ve bu gönül yarası neden olur. Bir kontrol karakteri (nnn) - JSON.parse satırsonu olarak değişmez basılmış "\ n" anlayacaksınız çünkü
bu nedenle bu geçici bir çözüm bulmak için: -
A)
First encode the json object in php using json_enocde and get a string. Then run it through a filter that makes it safe to be used inside html and java script.
B)
use the JSON string coming from PHP as a "literal" and put it inside single quotes instead of double quotes.
<?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 script tek tırnak içinde dize koymak. Çift tırnak içine json dize koyarak ayrıştırıcı niteliği marker ({: "değer" "id"} gibi bir şey) başarısız olmasına neden olur. Eğer "literal" olarak dize koymak ve JSON ayrıştırıcı çalışma yapalım eğer başka hiçbir öncelemeli gerekli olmalıdır.