![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
что-то я в шоке, а найти проблему не могу
посылаю запрос на rss-ленту, получаю xml-файл и парсю его (адрес ленты) происходит следующее, на локале у меня всё отрабатывает хорошо, перекладываю на один сервер, тоже хорошо, кладу на другой - вместо кирилицы знаки вопроса сбрасывается она в utf-8, я её затем перекодирую на cp-1251 для занесения в БД и последующего отображения, НО даже если не перекодировать, а чисто по приёме echo fread() открытого адреса ленты через fopen, всё равно знаки вопроса. и только на одном сервере. чем и как это можно объяснить, а главное как бороться? Добавлено через 57 секунд да, чуть не забыл. другие ленты нормально обрабатываются на том серевере, к примеру с gismeteo Добавлено через 12 минут и 14 секунд php на локале 5.2.6, на работающем сервере 5.1.6, на сервере который буянит 4.4.8 |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
PHP на уровне языка стал поддерживать UTF только с 5 версии. Так что глюк на 4 очевиден.
Смена кодировок в браузере не помогает? Если нет, надо код смотреть, возможно есть в нем явная ошибка. |
|||
|
||||
Anarki |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 326 Регистрация: 14.3.2005 Репутация: 7 Всего: 11 |
А лента в какой кодировке, кодировка страницы которая выводится и ленты, которая выводится в этой странице должны совпадать.
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
нет, для работающего сервера и локального, если перекодировать iconv() поступающий текст, то выводит кирилицу как надо в cp1251. если не перекодировать, а сразу отправлять echo приходящие данные в браузер, то получаются кракозябры (разные знаки), выбираем в браузере кодировку utf-8 и текст превращается в нормальные слова кирилице для не работающего сервера, как не выводи, вся кирилица всегда отображается знаками вопроса ????? ?????? ???. также записывается в БД и также записывается в файл да вроде уже не на одной ленте опробовал
лента в utf-8. в первом посту её адрес. с работы уходил пытался с помощью get_headers() прочитать заголовки, да что-то наверно не так задавал, она мне вообще ничего не возвращала. |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
bars80080, надо смотреть, как транспорт (получение) ленты или ее создание работают...
Так очевидно, древность PHP, вопрос в том, можно ли легко адаптировать под 4 код или нет. Код может быть и правильный и рабочий, но для 4 ПХП упущена какая-то особенность, в результате чего - косяк. |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
вот, нарыл у себя в домашних условиях эти куски
скрипт нормально работает с несколькими лентами, в том числе и с utf-8 эта строчка if(!empty($xmlc)) { $data = iconv($xmlc[0], $xmlc[1], $data); } отвечает за перекодирование, но я её отключаю и ничего не меняется Добавлено через 5 минут и 42 секунды сейчас посмотрел. на этом же сервере этим скриптом парсятся ещё ленты погоды и ЦБР , но первая не содержит кирилицы, а вторая идёт в cp1251 |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
таки списываем эти глюки на сервер?
вот так и растут заплатки. теперь у меня эту ленту читает только сервер1, перекодирует, обрабатывает данные, заносит в БД. сервер2 обращается к сервер1 и получает ленту уже в кодировке вин-1251. так работает |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 122 Всего: 261 |
bars80080, я с xml не работал на PHP, но скорее всего фишка в том, что 5 поддерживает использование UTF функциями trim и xml_*, а 4 - нет. Отсюда и косяк. Причина - банальна - отсутствие правильной работы с мультибайтовыми строками...
Это не глюк, это просто особенность старой ветки. |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
да, ты прав. поставил вывод сразу после fread() и он отобразил текст в utf-8 как надо
скорее всего рубит trim, я заключил вывод в trim и текст исчез полностью, но что не так уже не стал разбираться, пусть так работает |
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |