javascript json - проблема декодирования массива ajax json из php - PullRequest
0 голосов
/ 24 октября 2010

Я использую функцию php's json_encode () для преобразования массива в json, который затем выводит его и читает из ajax-запроса javascript.

Проблема в том, что у echo'd текста есть символы Unicode, которые в javascriptФункция json parse () не конвертируется в.

Примером значения массива является "2 \ u00001 \ u00000 \ u0000- \ 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;
            }

Ответы [ 2 ]

1 голос
/ 24 октября 2010

Чтобы добавить к сказанному Гуффой:

Когда у вас чередуются нулевые байты, почти наверняка произошло то, что вы прочитали источник данных UTF-16, не преобразовав его в ASCII-совместимую кодировку, такую ​​как UTF-8. Хотя вы можете выбросить нули, это приведет к искажению строки, если она содержит символы вне диапазона ASCII. (Конечно, это не проблема для строк дат, но это может повлиять на любые другие строки, которые вы читаете из того же источника.)

Проверьте, откуда ваш PHP-код читает строку 2010-10-01, и либо конвертируйте ее на лету, используя, например, iconv('utf-16le', 'utf-8', $string), либо измените источник, чтобы использовать более разумную кодировку. Например, если это текстовый файл, сохраните его в текстовом редакторе, используя «UTF-8 без BOM», а не «Unicode», что является вводящим в заблуждение названием, которое текстовые редакторы Windows используют для обозначения UTF-16LE.

1 голос
/ 24 октября 2010

В строке есть NUL-символы (код символа ноль).На самом деле это "2_0_1_0_-_1_0_-_0_1", где _ представляет символы NUL.

Экранирование символов Юникода на самом деле является частью стандарта JSON, поэтому анализатор должен обрабатывать это правильно.Однако в результате все равно строка будет содержать NUL-символы, поэтому при попытке использовать строку в Javascript поведение будет зависеть от того, что браузер делает с NUL-символами.

Вы можете попробовать это в некоторыхразные браузеры:

alert('as\u0000df');

Internet Explorer будет отображать только as

Firefox будет отображать asdf, но символ NUL не отображается.

Лучшее решениебыло бы удалить символы NUL перед преобразованием данных в JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...