powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Странное поведение JSON-строки
25 сообщений из 27, страница 1 из 2
Странное поведение JSON-строки
    #38031204
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В БД записана JSONстрока

Её var_dump выдает:
string(137) "[{"description":"Средняя стоимость работ","cost":"","currency":2}]"
json_decode вызывает NULL

Копируем эту строку и вставляем напрямую в var_dump. Уже получается:
string(87) "[{"description":"Средняя стоимость работ","cost":"","currency":2}]"
json_decode возвращает массив.

Данные кодируются JS в JSON с помощью JSON.stringify(data) или encodeURIComponent(JSON.stringify(data)) (без разницы),
хранятся в БД в поле text utf8_unicode_ci, т.к. varchar слишком маленький для них

Что за дела такие?
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031219
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2var_dump выдает:
string( 137 )

Shitbox2Копируем эту строку и вставляем напрямую в var_dump. Уже получается:
string( 87 )

Как то оно странно скопировалось
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031231
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выделилось в браузере и скопировалось. Визуально строки идентичны. Понятно, что в БД что-то в 1,5 раза раздувает строку. Что? И как это убрать?
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031250
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Выделилось в браузере и скопировалось. Визуально строки идентичны. Понятно, что в БД что-то в 1,5 раза раздувает строку. Что? И как это убрать?
думаю кодировка... сам скрипт php в какой кодировке?
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031298
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати... И ещё вопрос в какой кодировке читается значение из базы (просто вероятно, что сначала надо вызвать что-то типа SET NAMES UTF8)
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031353
json_last_error
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031362
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Везде UTF-8 Выяснил, что на этапе передачи из JS такая фигня приходит...
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031417
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Везде UTF-8 Выяснил, что на этапе передачи из JS такая фигня приходит...
Shitbox2 ранееВ БД записана JSONстрока ...

Сформулируй нормально что ты делаешь, и что получается. Сначала ты её из БД берёшь, потом оказывается из js передаёшь.
Если всё-таки используется ajax, то надо помнить, что он работает только в utf8, а значит если страница загрузилась в cp1251 (по любой из десятка возможных причин), то и данные уйдут в cp1251 и соответственно прийдут уже крякозябры (кодировка выбрана наиболее вероятная, может быть и другая)
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031423
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JSON_ERROR_CTRL_CHAR выдает, а сама строка выглядит так: [{"description":"Средняя стоимость работ","cost":"34","currency":2}]

Причем, не зависимо от того использую ли encodeURIComponent или нет. Это странно, т.к. в другом случае связка
encodeURIComponent(JSON.stringify(data)) -> json_decode(data, true) работает без проблем.

Правда в этом случае данные еще прогоняются транзитом через плагин http://malsup.github.com/jquery.form.js, возможно он что-то меняет. Как это узнать? Какая функция в JS может так пакостить?
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031442
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, в строке "[{"description":"Средняя стоимость работ","cost":"","currency":2}]" - 66 символов. Так что всё это вообще странно как-то :)
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031457
sxq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы смотрите результат в обозревателе как HTML или как исходный код страницы в блокноте?
откройте результат работы скрипта который выдает string(137) "[{"description":"Средняя стоимость работ","cost":"","currency":2}]"
в виде исходного кода страницы, что там?
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031484
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что делаю:
В js передаю массив транзитом через плагин jquery.form как параметр
data: {mytext: encodeURIComponent(JSON.stringify(data))}. В PHP получаю нобор параметров, в том числе и mytext c нужной строкой. Далее записываю его в БД и проч. Так вот, строка в mytext получается искаженной и пока не могу разобраться как ее исправить
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031487
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там все кавычки заменены на " :((
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031572
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На &quot т.е.
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031573
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин... quot
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031698
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Заменить quot обратно на кавычки. Не?
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031723
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38031746
Програмёр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Там все кавычки заменены на &quot :((

Ну... это нормально, когда используешь var_dump :) он же и предназначен для вывода в HTML :)
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38032700
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
print_r то же самое выводил) Как раз тоже нагуглил specialchars-decode. Помогло. Хотя, конечно, хотелось бы решить эту проблему в JS, что 100500 раз не кодировать. Но там, ума на приложу, что так кодирует строку
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38032701
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2хотелось бы решить эту проблему в JSВ общем то, мысль в правильном направлении. Тем более, что ноги ратут как раз оттуда. Только вот зачем сделано такое преобразование - вопрос уже другого толка. Не просто ж так прикрутили... Возможно, для того чтобы гарантировано избежать проблем при появлении кавычек в значении поля формы. Тогда удаление такого преобразования может потянуть за собой другую проблему.
Shitbox2Какая функция в JS может так пакостить?Да, собственно, любой способ замены подстроки.
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38032864
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2В БД записана JSONстрока

Её var_dump выдает:
string(137) "[{"description":"Средняя стоимость работ","cost":"","currency":2}]"
json_decode вызывает NULL

Копируем эту строку и вставляем напрямую в var_dump. Уже получается:
string(87) "[{"description":"Средняя стоимость работ","cost":"","currency":2}]"
json_decode возвращает массив.

Данные кодируются JS в JSON с помощью JSON.stringify(data) или encodeURIComponent(JSON.stringify(data)) (без разницы),
хранятся в БД в поле text utf8_unicode_ci, т.к. varchar слишком маленький для них

Что за дела такие?страницы в cp1251. боролся и поборол в json отправку кириллицы на клиент так _http://phptunes.blogspot.com/2007/01/phpjson.html - не работает (

тогда код. с помощью

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function json_unfix_cyr($var)
{
   if (is_array($var)) {
       $new = array();
       foreach ($var as $k => $v) {
           $new[json_fix_cyr($k)] = json_fix_cyr($v);
       }
       $var = $new;
   } elseif (is_object($var)) {
       $vars = get_object_vars($var);
       foreach ($vars as $m => $v) {
           $var->$m = json_fix_cyr($v);
       }
   } elseif (is_string($var)) {
       $var = iconv('utf-8', 'cp1251', $var);
   }
   return $var;
}
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38032882
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38032900
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... Ничего подобного, вот с кириллицей проблем никогда не было.

На своем опыте убедился, что в js (ANSI) → php (ANSI/UTF-8)
без проблем работает JSON.stringify(data) → json_decode(data, true)

Для js (UTF-8) → php (ANSI/UTF-8)
Нужно писать encodeURIComponent(JSON.stringify(data)) → json_decode(data, true)
иначе вырежутся знаки "+".


Cудя по всему, в плагине делается преобразование типа specialchars, но где... Ни одной похожей строковой функции там не нашел.
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38032932
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shitbox2Хм... Ничего подобного, вот с кириллицей проблем никогда не было.что "ничего подобного"? говорю, только так победил.

Код: php
1.
2.
3.
4.
function json_safe_encode($var)
{
   return json_encode(json_fix_cyr($var));
}


Код: html
1.
2.
var args = new Array();
args = JSON.parse('<? echo json_unfix_cyr(json_safe_encode($args['all_offer_cars'])); ?>');
...
Рейтинг: 0 / 0
Странное поведение JSON-строки
    #38032933
Фотография ILL HEAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
function json_fix_cyr($var)
{
   if (is_array($var)) {
       $new = array();
       foreach ($var as $k => $v) {
           $new[json_fix_cyr($k)] = json_fix_cyr($v);
       }
       $var = $new;
   } elseif (is_object($var)) {
       $vars = get_object_vars($var);
       foreach ($vars as $m => $v) {
           $var->$m = json_fix_cyr($v);
       }
   } elseif (is_string($var)) {
       $var = iconv('cp1251', 'utf-8', $var);
   }
   return $var;
}
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Странное поведение JSON-строки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]