Проблемы с русскими буквами при сериализации массива

Тема в разделе "JavaScript", создана пользователем danneo, 3 янв 2014.

Модераторы: ZiX
  1. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Три часа мозго.....ва толку не дали...
    В php создал массив. Далее его сериализую в строку: json_encode($var) и возвращаю в js
    А приходит туда пустота в нужном элементе. Если в этот элемент при формировании массива в php запихнуть не русские буквы, то все приходит нормально.
    Пробовал решить задачу без сериализации: снача в php serialize($var), но как в js провести обратную десериализацию, не знаю.
    Но хотелось бы работать в зашифрованном виде, через json_encode
    Подскажите, пожалуйста, как решить проблему?
     
  2. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.035
    Симпатии:
    2.034
    json_encode работает корректно только с UTF-8, ровно как и AJAX. В противном случае надо изголяться с кодировками и перекодированием в base64 или аналогичные...

    P.s. json_encode НЕ ШИФРУЕТ ничего, она просто меняет представление с массива на обычный текст (пусть это и формат JSON)...
     
  3. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    все файлы в utf-8...

    ну она все таки сериализут. А я передаю массив. Как-то можно еще просто передать массив?
     
  4. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Оказывается проблема в другом была: сообщения которые возвращались, были такие:
    HTML:
    <div clas="error">Размер картинки не должен превышать 1 мб</div>
    И json.parse() ругался то на кодировку, то на битый массив из-за кавычек (экранирование не помогло), то на теги div.
    Пришлось убрать все теги.
    А можно как-то HTML-теги передавать? Почему json не хочет их обрабатывать?
     
  5. krdma

    krdma Постоялец

    Регистр.:
    1 июн 2009
    Сообщения:
    89
    Симпатии:
    15
    console.log(json) что выдает?
    И неплохо было бы выдеть код со стороны сервера и со стороны клиента.
     
  6. danneo

    danneo Честный

    Регистр.:
    13 ноя 2007
    Сообщения:
    1.418
    Симпатии:
    109
    Получается, что:
    если нет html-тегов, то в консоле выводится то, что и должно быть.
    А если есть теги, то выводиться ошибка: JSON.parse: unexpected non-whitespace character after JSON data
    все что я сделал, дак это обернул возвращаемый текст в php-файле тегами <p>
     
  7. esche

    esche

    Регистр.:
    9 авг 2009
    Сообщения:
    360
    Симпатии:
    243
    "обернул" уже после encode? Что приходит в ответе от сервера?
    Если так:
    Код:
    <p>{JSON-данные}</p>
    то, конечно, это неправильно.

    Дабы исключить все ошибки, есть смысл делать примерно так:
    Код:
    <?php
    // тут ничего не выводится. При желании - передать нужный header();
    // формируем массив с данными для передачи..
    $result=array('message'=>'бла-бла');
    $result['error']=0;
    $result['message'] = "<p>{$result['message']}</p>"; // обернули тэгами
    echo json_encode($result);
    exit(); // завершаем выполнение