我已經看到了一些相關的答案,其中來自PHP的JSON字符串中的特定字符被轉換爲javascript友好版本。 隨着一些幫助,我已經走到這一步:在javascript中使用PHP生成的JSON:使用反斜槓的問題
- JavaScript不處理反斜槓非常好,事實上這些都需要用雙反斜線來代替。
- 新行字符\ r \ n不能很好地工作,無論您需要回車還是完全刪除符號。
- 字符串中的雙引號需要通過'雙反斜槓'而不是單個引號進行轉義。
- 通過路徑中的反斜槓顯示的正斜槓不需要轉義。下面
例如非工作JSON(在jsonlint得到證實,但在JSON.parse失敗)
["string\r\n next line \"quoted text\" and \b at path \/var\/opt "]
我需要轉換爲替代以下後,使其工作
["string next line \\"quoted text\\" and \\b at path /var/opt "]
問題
我的問題是,我在PHP中的JSON取決於我們呃輸入,我不知道他們會放什麼。 PHP將使用標準的json轉換方法並進行驗證。
像上面那樣,我還有其他應該覆蓋的場景,特別是unicode,其他特殊字符等嗎?
更新
我的JSON字符串比這個例子和動態變化更復雜一點,一個小例子是
{ "settings.conf": [ "tooltip='dynamic unicode text multiline with \ or \\ or even \" etc '", "value=the value"]}
Im做
var jstring = <?php sanitize_json(json_encode($source_array)); ?>
JSON.parse(jstring);
和我sanitize_json功能目前正在做反斜槓替換並正在工作,但是我想包含換行符\ r \ n。還需要確保js中沒有其他類似json的問題。
「我的問題是,我在PHP中的json取決於用戶的輸入,我不知道他們會放什麼。「來自用戶的任何輸入都應在處理之前進行消毒。 – Mooseman
你能解釋一下這個問題嗎?對不起,但我無法掌握你的第一個字符串錯在哪裏 - 它會產生有效的對象(在JS中)。是否允許用戶製作自己的JSON,然後將其保存到DB,然後通過JSON.parse轉向JS對象? – eithed