За последние 24 часа нас посетили 17415 программистов и 1683 робота. Сейчас ищут 900 программистов ...

json_encode utf-8 - cp1251 смена кодировки при парсинге

Тема в разделе "Прочие вопросы по PHP", создана пользователем Vantedur, 19 янв 2011.

  1. Vantedur

    Vantedur Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    779
    Симпатии:
    2
    PHP:
    1. $charset = strtolower($charset);   
    2. if ($charset=="utf-8"){
    3. $transformator = $text;
    4. $transformator = json_encode($transformator);
    5. $arr_replace_cyr=array("\u0410", "\u0430", "\u0411", "\u0431", "\u0412", "\u0432", "\u0413", "\u0433", "\u0414", "\u0434", "\u0415", "\u0435", "\u0401", "\u0451", "\u0416", "\u0436", "\u0417", "\u0437", "\u0418", "\u0438", "\u0419", "\u0439", "\u041a", "\u043a", "\u041b", "\u043b", "\u041c", "\u043c", "\u041d", "\u043d", "\u041e", "\u043e", "\u041f", "\u043f", "\u0420", "\u0440", "\u0421", "\u0441", "\u0422", "\u0442", "\u0423", "\u0443", "\u0424", "\u0444", "\u0425", "\u0445", "\u0426", "\u0446", "\u0427", "\u0447", "\u0428", "\u0448", "\u0429", "\u0449", "\u042a", "\u044a", "\u042d", "\u044b", "\u042c", "\u044c", "\u042d", "\u044d", "\u042e", "\u044e", "\u042f", "\u044f");
    6. $arr_replace_utf = array("А", "а", "Б", "б", "В", "в", "Г", "г", "Д", "д", "Е", "е", "Ё", "ё", "Ж","ж","З","з","И","и","Й","й","К","к","Л","л","М","м","Н","н","О","о","П","п","Р","р","С","с","Т","т","У","у","Ф","ф","Х","х","Ц","ц","Ч","ч","Ш","ш","Щ","щ","Ъ","ъ","Ы","ы","Ь","ь","Э","э","Ю","ю","Я","я");
    7. $transformator = str_replace($arr_replace_cyr, $arr_replace_utf, $transformator);      
    8. $text = $transformator;
    9. }
     
  2. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Не лучший выход. Лучше сказать браузеру какая кодировка.
     
  3. Carella

    Carella Активный пользователь

    С нами с:
    26 окт 2009
    Сообщения:
    35
    Симпатии:
    0
    Адрес:
    Челябинск
    а чего iconv() не катит?
     
  4. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Он не на всех хостингах) Поэтому если хочешь сделать действительно платформонезависимый софт придется извращаться.
     
  5. Vantedur

    Vantedur Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    779
    Симпатии:
    2
    iconv() криво работает, хотя может я что-то с ним не так делаю.
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    iconv работает замечательно
     
  7. Vantedur

    Vantedur Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    779
    Симпатии:
    2
    быть может, одним json_encode в любом случае не обошлось =))
     
  8. gorbenko.alex

    gorbenko.alex Активный пользователь

    С нами с:
    15 мар 2011
    Сообщения:
    2
    Симпатии:
    0
    Добрый день Всем!
    Столкнулся с этой же проблемой, но есть одно НО !!!
    На localhost всё отрабатывает нормально:
    в *.php существует многомерный массив, после чего передаю его - echo json_encode($mas);
    на стороне JavaScript принимаю - var res1 = <?php include('array.php'); echo json_decode($mas); ?>; и вывожу на консоль - console.log(res1);
    всё супер !!!
    а как только вылаживаю на Хостинг сразу трабл с кодировкой возникает.
    Как только не извращался - ничего не спасает - может кому то всё таки удалось решить этот трабл. Буду признателен за помошь.
    Заранее Спасибо !
     
  9. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Посмотрите заголовки Encoding, которые отдаёт сервер и поменяёте их функцией header. Я лично таким методом перевёл весь аякс в системе на однобайтовую кодировку.
     
  10. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    а лучше изначально пользоваться utf-8 :)
     
  11. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    json_encode вообще работает только с UTF-8 данными. В мануале об этом написано у параметра value:
     
  12. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Лучше для кого? Для пользователя? Ему по большому счету главное чтобы не крякозябры были:) Для СУБД это не лучше, так как требуется в 2 раза больше места под текстовую информацию.

    Правда я писал свою реализацию перекодировщика JSON, которая кстати в 2 раза быстрее штатной.
     
  13. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    мускул 5 изначально настроен на использование utf-8. так что скорее это лучше, чем хуже.
    к тому же при правильном использовании избавляешься от многих проблем, среди которых
    отправка JSON, хранение многоязыкового содержимого; отсутствие вообще каких-либо проблем
    с хранением непонятных символов и ещё много-много чего.

    а взамен лишь чуть больше места для хранения в базе.
     
  14. <?=RPG?>

    <?=RPG?> Активный пользователь

    С нами с:
    19 ноя 2010
    Сообщения:
    451
    Симпатии:
    0
    Ну то что мускул настроен на интернациональную кодировку, это только говорит о том, что приложение нацелено на интернациональную аудиторию.

    Хорошие знания в области кодирования данных не приведут к «каким-либо» проблемам с хранением непонятных символов. Я ориентирую свои приложения в первую очередь на Россию и СНГ максимум, но никак не Китай и Индию, так что UTF-8 отложим на потом:) не то что проблема его использовать — перенастроить кодировку несложно — просто не вижу каких-либо серьезных причин его использовать (по крайней мере у нас). Если бы я писал приложение, ориентированное на использование во всем мире, то естественно выбрал бы UTF.

    В полтора-два раза больше места это не чуть-чуть...

    Насчёт того как подружить JSON и 1251 (исходники js открыты)
    http://studio-sdom.ru