3 回答

TA貢獻1784條經(jīng)驗 獲得超7個贊
JSON規(guī)范要求解碼器支持UTF-8。結(jié)果,所有JSON解碼器都可以處理UTF-8,也可以處理數(shù)字轉(zhuǎn)義序列。Java解釋器也是如此,這意味著JSONP也將處理UTF-8編碼的JSON。
JSON編碼器使用數(shù)字轉(zhuǎn)義序列的功能只是為您提供了更多選擇。選擇數(shù)字轉(zhuǎn)義序列的一個原因是,如果編碼器和預(yù)期的解碼器之間的傳輸機制不是二進制安全的。
你可能想要使用數(shù)字轉(zhuǎn)義序列的另一個原因是為了防止出現(xiàn)在流中的某些字符,例如<
,&
和"
,如果JSON代碼被置于不逃逸到HTML或錯誤地將其解釋瀏覽器作為HTML,其可被解釋為HTML序列。這可以抵御HTML注入或跨站點腳本的攻擊(注意:某些字符必須在JSON中轉(zhuǎn)義,包括"
和\
)。
一些框架,包括PHP的JSON實現(xiàn),總是在編碼器端對ASCII以外的任何字符執(zhí)行數(shù)字轉(zhuǎn)義序列。這旨在與有限的傳輸機制等實現(xiàn)最大的兼容性。但是,這不應(yīng)解釋為JSON解碼器在UTF-8上存在問題的指示。
因此,我想您可以像這樣決定使用哪個:
除非您的編碼器和解碼器之間的存儲或傳輸方法不是二進制安全的,否則請僅使用UTF-8。
否則,請使用數(shù)字轉(zhuǎn)義序列。

TA貢獻1824條經(jīng)驗 獲得超6個贊
我在那里有問題。當我使用“é”等字符對字符串進行JSON編碼時,除IE會返回“ \ u00e9”外,每個瀏覽器都將返回相同的“é”。
然后使用PHP json_decode(),如果找到“é”,它將失敗,因此對于Firefox,Opera,Safari和Chrome,我必須在json_decode()之前調(diào)用utf8_encode()。
注意:在我的測試中,IE和Firefox使用的是本機JSON對象,其他瀏覽器使用的是json2.js。

TA貢獻2019條經(jīng)驗 獲得超9個贊
ASCII不再存在。使用UTF-8編碼意味著您沒有使用ASCII編碼。您應(yīng)該使用轉(zhuǎn)義機制的是RFC所說的:
除必須轉(zhuǎn)義的字符外,所有Unicode字符都可以放在引號內(nèi):引號,反斜線和控制字符(U + 0000至U + 001F)
- 3 回答
- 0 關(guān)注
- 701 瀏覽
添加回答
舉報