Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с кодировкой при получении данных. Получение данных от сервера 
:(
    Опции темы
Alagert
Дата 22.10.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 25.8.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Всем доброго времени суток!

Выпало мне заниматься поддержкой одного решения на PHP в силу отпуска одного из сотрудников и, как водится, в это самое время полезли проблемы smile Прошу помощи. 

В целом задача выглядит следующим образом: спросить сервер по указанному урлу, получить от него ответ в виде строки текста:

Код

Track Title
Artist Name
Album Title


Распарсить ее. Все выглядит просто smile Но вылезли проблемы с кодировкой, когда в ответе есть аумляуты или русские названия. 

Собственно код:

Код

$permission_resp = trim(file_get_contents("$url"));

//checking response ecoding
print_log('Permission encoding= '.mb_detect_encoding($permission_resp));

$permission_resp_parts=explode("\n", $permission_resp);

//checking encoding of parts
for($i=0;$i<3;$i++){
  print_log("Permission resp part $i ".mb_detect_encoding($permission_resp_parts[$i]));
}

//check system encoding
print_log('Encoding= '.mb_internal_encoding());


В результате имеем следующий ответ:
Код

Permission encoding= UTF-8
Permission resp part 0 UTF-8
Permission resp part 1 ASCII
Permission resp part 2 ASCII

Encoding= ISO-8859-1


Вопрос: почему части ответа стали представляться в ASCII? Как правильно обработать эту ситуацию.

ЗЫ. В PHP нуб smile
--------------------
[color=blue]BORN TO BE ROOT#[/color]  
PM MAIL ICQ   Вверх
krypt3r
Дата 23.10.2009, 06:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 9.6.2009

Репутация: 1
Всего: 16



Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом.

Юзайте UTF-8 only
PM MAIL   Вверх
sTa1kEr
Дата 23.10.2009, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 5
Всего: 146



Цитата(Alagert @  22.10.2009,  16:43 Найти цитируемый пост)
Вопрос: почему части ответа стали представляться в ASCII?

Алгоритм работы mb_detect_encoding() следующий:
1. Функция получает порядок которому будет следовать при определении кодировки. Этот порядок можно задать при помощи mb_detect_order() или вторым параметром самой функции.
2. Берет следующую по списку кодировку и проверяет все ли символы из заданной строки валидны для этой кодировки.
2a. Если все символы валидны, то возвращает эту кодировку.
2b. Если хотя бы один символ не валиден , то идет к пункту 2.
А так как по умолчанию порядок кодировок 'ASCII, JIS, UTF-8, EUC-JP, SJIS', то эта функция для латиницы будет возвращать ASCII (т.к. по стандарту все символы US-ASCII валидны так же и для UTF-8).

Цитата(Alagert @  22.10.2009,  16:43 Найти цитируемый пост)
Как правильно обработать эту ситуацию.

Это зависит от того, чего вы хотите добиться.

PS Мндэ. Порой в вики такую ересь понапишут =\

Это сообщение отредактировал(а) sTa1kEr - 23.10.2009, 10:23
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0642 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.