從PHP轉換到PHP應該不是問題。 PHP的json_encode做適當的編碼,但重新解釋內部Java腳本可能會導致問題。像
1)原始字符串 - [字符串與它NNN換行符](其中nnn是實際換行符)
2)json_encode將這個轉換爲 [字符串 「\\ N」 換行符在(控制字符轉換爲「\\ n」 - 文字「\ n」
3)但是,當您使用php回顯以文字字符串重新打印時,則「\\ n」被解釋爲「\ n」並導致心痛。因爲JSON.parse將理解文字印刷 「\ n」 個如換行符 - 一個控制字符(NNN)
這樣來解決此: -
A) 首先編碼在PHP JSON對象使用json_enocde和得到一個字符串。然後通過一個過濾器來運行它,以便在html和java腳本中使用它。
B) 使用來自PHP的JSON字符串作爲「literal」,並將其放在單引號內而不是雙引號內。
<?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」})。如果將字符串設置爲「literal」,並且讓JSON解析器完成這項工作,則不需要其他轉義。
而不是<?php echo $ s?>學會使用=$s?> :)只是我的提示。 – Thinker 2009-06-26 11:26:39
感謝您的提示,但該快捷方式的回聲語法只適用於啓用short_open_tag時,我從來沒有使用短開標籤,因爲我更喜歡<?php over . – Gustav 2009-06-26 11:35:32
我已經編輯了我的答案 - 現在就可以工作,或者將你的錢翻倍! – Greg 2009-06-26 12:17:13