簡體   English   中英

帶有雙引號的json_encode傳遞給JSON.parse

[英]json_encode with double quotes passed into JSON.parse

我已經看到,多年來這個問題被問了太多遍了。 仍然不能不問這段時間是否有任何改進。

目前,我有PHP代碼:

$jsonData = json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT);

然后JS(具體來說就是Angular)開始發揮作用:

var decoded = angular.fromJson('<?php echo $jsonData ; ?>');

上面的標志在阻止某些問題方面做得很好。 但是,給出示例:

$data = ["name" => "Name \"Nickname\" Surname"];

JSON無法解析。 如果我使用addslashes()包裝數據, 則它確實可以工作 ,但是:

$data = ["name" => "Name 'Nickname' Surname"];

這失敗了。

由於結構$data高度不可預測,通常深度為4-5層,因此我的解決方案是:

array_walk_recursive($data, function(&$item, $key){
    $item = str_replace('"', '\"', $item);
});

這可行 ,但是,我正在尋找一些知識淵博的資源。 我讀過一些其他的SO問題,人們不僅會避免使用雙引號,而且還會換行,回車和反斜杠。

我需要做的最后一件事是陷入邊緣案例陷阱:)

對我有什么提示嗎?

由於json可以直接用作javascript中的對象文字,因此您可以像這樣使用它:

var decoded = <?php echo $jsonData ; ?>;

因此,無需進行任何進一步的分析,以避免文本中'\\字符出現問題。 json_encode應該已經采取的照顧" charaters。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM