ФорумПрограммированиеPHP для идиотов → Unicode в обычный текст (как сделать?)

Unicode в обычный текст (как сделать?)

  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 6 августа 2007 г. 9:49

    Столкнулся с такой пролемой.
    Нужно перевести юникод в кирилицу и вывести на странице.
    (если ничего конечно не путаю, то это именно юникод, ставил в браузере Unicode - utf8 и текст отображался)
    Вот данный текст - %d0%ba%d1%83%d0%bb%d0%b5%d1%80%d1%8b+%d0%bc%d0%be%d1%81%d0%ba%d0%b2%d0%b0
    Я его выдергиваю из запроса гугла. как я понял он всё таким образом передат. Чего-то другие поисковые запросы просто обрабатываются функцией urldecode() а тут абракадабру выдает.
    Вобщем вроде описал суть проблемы :)
    Кстати можно как-то изначально определить какая кодировка идет? А то у меня уже из запроса в яндексе такая же хрень в юникоде проскакивала.
    from TRIAL with LOVE
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 6 августа 2007 г. 10:39, спустя 49 минут 16 секунд

    urldecode -> получаешь исходную строку (в кодировке utf).
    потом
    mb_convert_encoding() или iconv().
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 6 августа 2007 г. 15:57, спустя 5 часов 18 минут 12 секунд

    Работает функция отлично но только в конкретных случаях.
    Просто одни запросы она начинает отображать нормально, а вот те что до этого работали, пропадают совсем.
    Пытался использовать mb_detect_encoding(). Но он походу не всё правильно определяет.
    Например для кривого и нормального запросов, он мне выдал одну и ту же кодировку ASCII.
    Можно как-то точно определять кодировку?
    from TRIAL with LOVE
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 6 августа 2007 г. 16:07, спустя 10 минут 1 секунду

    Приводи код. urldecode используешь?
    обрати внимание на чередующийся %d0…%d1 это точно кирилица в юникоде.
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 6 августа 2007 г. 16:10, спустя 2 минуты 50 секунд


    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <?php

    print urlDecode('%d0%ba%d1%83%d0%bb%d0%b5%d1%80%d1%8b+%d0%bc%d0%be%d1%81%d0%ba%d0%b2%d0%b0');

    ?>

    кулеры москва


    <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
    <?php

    print
    mb_convert_encoding(
    urlDecode('%d0%ba%d1%83%d0%bb%d0%b5%d1%80%d1%8b+%d0%bc%d0%be%d1%81%d0%ba%d0%b2%d0%b0'),
    'windows-1251',
    'utf-8'
    );

    ?>

    кулеры москва
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 6 августа 2007 г. 16:16, спустя 6 минут 36 секунд

    Не всегда это работает. Если так сделать, то кривые запросы начинают отображаться а вот нормальные перестают.
    Щас сделал так:
    $s1 = mb_convert_encoding(urldecode($search_arr1[0]), "windows-1251", "auto");
    if(strlen($s1)<1) $s1 = urldecode($search_arr1[0]);

    Пока всё работает. Посморим что дальше будет.
    Просто как я уже говорил изначально не знаю в какой кодировке придет запрос из URL'a.
    from TRIAL with LOVE
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 6 августа 2007 г. 16:20, спустя 3 минуты 30 секунд

    1. Что значит "кривые"?
    2. Откуда он вообще приходит?
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 6 августа 2007 г. 16:25, спустя 4 минуты 57 секунд

    ну тут он походу составляет список поисковых слов, по которым приходят юзеры для статы
    все умрут, а я изумруд
  • TRIAL

    Сообщения: 988 Репутация: N Группа: Джедаи

    Spritz 6 августа 2007 г. 17:45, спустя 1 час 20 минут 32 секунды

    Да, делаю именно это. Разбираю урлы на части и выдергиваю оттуда запросы.

    Блин, опять моя фигня работает только для общего случая.
    Причем забавный момент.
    strlen($s1) выдает 1
    стоит после этого проверка
    if($s1 < 3) …
    И это условие не выполняется.
    ——
    Всё, нашел очередной способ )))
    вот:
    elseif($arr['host'] == "www.yandex.ru") {
    $search_arr = explode("text=", $arr['query']);
    $search_arr1 = explode("&", str_replace("+","%20", $search_arr[1]));
    $plus_arr = explode("%20", $search_arr1[0]);
    $s1 = mb_convert_encoding(urldecode($search_arr1[0]), "windows-1251", "auto");
    if(strlen($s1)<count($plus_arr)) $s1 = urldecode($search_arr1[0]);
    $search .= $s1."<br>";
    }
    from TRIAL with LOVE
  • zaxar

    Сообщения: 33 Репутация: N Группа: Кто попало

    Spritz 6 августа 2007 г. 18:04, спустя 18 минут 50 секунд

    Причем забавный момент.
    strlen($s1) выдает 1
    стоит после этого проверка
    if($s1 < 3) …
    И это условие не выполняется.


    Ничего забавного. Что хранится в $s1 ? Уверен, что не своя же собственная длина!

    if(strlen($s1) < 3)

Пожалуйста, авторизуйтесь, чтобы написать комментарий!