Форум → Программирование → PHP для идиотов → Unicode в обычный текст (как сделать?)
Unicode в обычный текст (как сделать?)
-
Столкнулся с такой пролемой.
Нужно перевести юникод в кирилицу и вывести на странице.
(если ничего конечно не путаю, то это именно юникод, ставил в браузере 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 -
-
6 августа 2007 г. 15:57, спустя 5 часов 18 минут 12 секунд
Работает функция отлично но только в конкретных случаях.
Просто одни запросы она начинает отображать нормально, а вот те что до этого работали, пропадают совсем.
Пытался использовать mb_detect_encoding(). Но он походу не всё правильно определяет.
Например для кривого и нормального запросов, он мне выдал одну и ту же кодировку ASCII.
Можно как-то точно определять кодировку?from TRIAL with LOVE -
6 августа 2007 г. 16:07, спустя 10 минут 1 секунду
Приводи код. urldecode используешь?
обрати внимание на чередующийся %d0…%d1 это точно кирилица в юникоде. -
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'
);
?>кулеры москва
-
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 -
6 августа 2007 г. 16:20, спустя 3 минуты 30 секунд
1. Что значит "кривые"?
2. Откуда он вообще приходит? -
6 августа 2007 г. 16:25, спустя 4 минуты 57 секунд
ну тут он походу составляет список поисковых слов, по которым приходят юзеры для статывсе умрут, а я изумруд -
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 -
6 августа 2007 г. 18:04, спустя 18 минут 50 секунд
Причем забавный момент.
strlen($s1) выдает 1
стоит после этого проверка
if($s1 < 3) …
И это условие не выполняется.
Ничего забавного. Что хранится в $s1 ? Уверен, что не своя же собственная длина!
if(strlen($s1) < 3)
Пожалуйста, авторизуйтесь, чтобы написать комментарий!