ตอนนี้เห็นได้ชัด\r
, \b
, \t
,\f
ฯลฯ ไม่ได้เป็นตัวอักษรเพียงปัญหาที่สามารถให้ข้อผิดพลาดนี้
โปรดทราบว่าเบราว์เซอร์บางตัวอาจมีข้อกำหนดเพิ่มเติมสำหรับการป้อนข้อมูลJSON.parse
ข้อกำหนดสำหรับการป้อนข้อมูลของ
เรียกใช้รหัสทดสอบนี้บนเบราว์เซอร์ของคุณ:
var arr = [];
for(var x=0; x < 0xffff; ++x){
try{
JSON.parse(String.fromCharCode(0x22, x, 0x22));
}catch(e){
arr.push(x);
}
}
console.log(arr);
การทดสอบบน Chrome ผมเห็นว่ามันไม่ได้ช่วยให้JSON.parse(String.fromCharCode(0x22, x, 0x22));
ที่x
34, 92 หรือจาก 0 ถึง 31
ตัวอักษร 34 และ 92 เป็นตัวอักษร"
และ\
ตามลำดับและมักจะคาดหวังและหลบหนีอย่างถูกต้อง มันคือตัวอักษร 0 ถึง 31 ที่จะทำให้คุณมีปัญหา
หากต้องการช่วยแก้จุดบกพร่องก่อนอื่นJSON.parse(input)
ให้ตรวจสอบก่อนว่าอินพุตไม่มีอักขระที่มีปัญหา:
function VerifyInput(input){
for(var x=0; x<input.length; ++x){
let c = input.charCodeAt(x);
if(c >= 0 && c <= 31){
throw 'problematic character found at position ' + x;
}
}
}