繁体   English   中英

javascript json-从php解码ajax json数组时出现问题

[英]javascript json - problem decoding ajax json array from php

我正在使用php的json_encode()将数组转换为json,然后将其回显并从javascript ajax请求中读取。

问题是echo'd文本有unicode字符,javascript json parse()函数没有转换为。

示例数组值为“2 \\ u00000 \\ u00000 \\ u0000 \\ u0000 \\ u00000 \\ u00000 \\ u0000 \\ u00000 \\ u00001”,即“2010-10-01”。

Json.parse()只给我“2”。

有人帮我解决这个问题吗?

例:

            var resArray = JSON.parse(this.responseText);
            for(var x=0; x < resArray.length; x++) {
                var twt = resArray[x];
                alert(twt.date);
                break;
            }

字符串中包含NUL个字符(字符代码为零)。 它实际上是"2_0_1_0_-_1_0_-_0_1" ,其中_代表NUL字符。

unicode字符转义实际上是JSON标准的一部分,因此解析器应该正确处理它。 但是,结果仍然是字符串中的NUL字符,因此当您尝试在Javascript中使用字符串时,行为将取决于浏览器对NUL字符的作用。

您可以在某些不同的浏览器中尝试此操作:

alert('as\u0000df');

Internet Explorer将仅显示as

Firefox将显示asdf但不显示NUL字符。

最好的解决方案是在将数据转换为JSON之前删除NUL字符。

加上古法所说的话:

当你有零字节交替时,几乎可以肯定的是你已经读过一个UTF-16数据源而没有将它转换为UTF-8等ASCII兼容编码。 虽然您可以丢弃空值,但如果它包含ASCII范围之外的任何字符,则会破坏该字符串。 (日期字符串当然不是问题,但是它可能会影响您从同一来源读取的任何其他字符串。)

检查您的PHP代码从哪里读取2010-10-01字符串,并使用例如iconv('utf-16le', 'utf-8', $string)转换它,或者更改源代码以使用更合理的编码。 例如,如果它是文本文件,则使用“UTF-8无BOM”保存在文本编辑器中,而不是“Unicode”,这是Windows文本编辑器用来表示UTF-16LE的极具误导性的名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM