iconv - проблема с кодировками

MpakFM

Новичок
iconv - проблема с кодировками

трабл с этой функцией...
$res = iconv("koi8-r","utf-8",$tmp); - работает
$res = iconv("windows-1251","utf-8",$tmp); - работает
$res = iconv("koi8-r","windows-1251",$tmp); - работает
$res = iconv("windows-1251","koi8-r",$tmp); - работает

$res = iconv("utf-8","koi8-r",$tmp); - не работает, в $res - FALSE
$res = iconv("utf-8","windows-1251",$tmp); - не работает, в $res - FALSE

Почему ф-ция не хочет кодировать из utf-8 ???

в $tmp кусок текста в utf-8 с тегами (кодировка определяется по заголовкам MIME)
типа:

Код:
<HTML><HEAD></HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><BR></DIV>
<DIV><FONT face="Arial CE" size=2><FONT face="Arial CE" size=2>Р%
ЈРІР°Р¶Р°РµРјС‹Рµ 
Коллеги!</FONT> 
<DIV><FONT face="ARIAL CE" size=2></FONT>&nbsp;</DIV>
<DIV><FONT face="ARIAL CE" size=2>С сегод%
РЅСЏС?него РґРЅСЏ,&nbsp;РІ %
связи с открыт%
ием 
дополнительнС%
‹С… рейсов РёР· РњРѕС%
ЃРєРІС‹, РђРћ ЛОТ РџРѕР»%
ьские Авиалин%
ии начинает ра%
спродажу 
билетов в Евро%
РїСѓ!</FONT></DIV>


... и т.д.
 

woodfairy

Новичок
попробуй

$text_utf8 = iconv('windows-1251','utf-8','привет');
$text_windows = iconv('utf-8','windows-1251',$text_utf8);

убедись, что работает.

У тебя, возможно, в последовательности символов встречается не соответствующий кодировке символ. В этом случае можно использовать один из ключей функции iconv: //IGNORE, //TRANSLIT (http://ru.php.net/manual/ru/function.iconv.php)

А, возможно, указана не та кодировка, в которой находятся символы.

И, действительно, включи вывод notice'ов: error_reporting(E_ALL)
 

Sepuka

Новичок
А почему работает огнелис и опера, а эксплорер выдает "Потому-что Detected illegal character in input string" ?
Думал что это за символ, поставил транслит - не работает, игнор - Detected an incomplete multibyte character. на входе utf-8, на выходе 1251
 

Sepuka

Новичок
да это понятно, просто многие пользуются IE, вот и приходится учитывать
 

Sepuka

Новичок
HraKK, уважаемый вы бы лучше молчали чем такие ответы постили, а то что-то не видно полезных комментов от вас в этом топике. Зачем вообще что-то писать если это не поделу?
 

phprus

Moderator
Команда форума
HraKK
Лично я согласен с Sepuka. Ваш комментарий:
Вот и учитывайте.
в этой теме помоему совершенно неуместен.

P.S. Да простят меня модераторы за оффтопик.
 

HraKK

Мудак
Команда форума
phprus
А помоему очень даже уместен.
У него 2 варианта - оставить все как есть работает в 2 браузерах, а в 3 нет. Или учесть 3.

Но изза того что это ИЕ вариантов - 0. Надо учитывать.
 

Sepuka

Новичок
я конечно прошу прощенья, но давайте действительно по-делу писать. Кстати, ссылку я и до этого читал (Воспользуйся алгоритмом их удаления описанным сдесь: http://phpclub.ru/faq/wakka.php?wak...ings/encodings3), но что-то в представленных функциях были ошибки, я еще не успел на них внимательно посмотреть. Хотелось бы до конце разобраться
 

AmdY

Пью пиво
Команда форума
если чел начинает связывать iconv и ИЕ, то пускай действительно забьёт.
 

Sepuka

Новичок
да ни кто ни чего не связывает, я говорю факт, так работает, а иначе нет. Но если интересно, то вместо iconv, пришлось использовать http://popoff.donetsk.ua/file/text/libs/a.charset.php только так работает как надо и во всех браузерах.
 

AmdY

Пью пиво
Команда форума
чёт я не могу понять, у тебя данные приходят от клиента и ты их конвертируешь iconv, но от ИЕ приходят левые символы.
И ты вместо того, чтобы разобраться почему так, используешь костыль?
А может стоит покопаться в в HEAD, чтобы такое не повторялось?
 

Sepuka

Новичок
ты все правильно понял. Из-за недостатка знаний пришлось использовать. скрипт отдает header('Content-type: text/plain; charset=windows-1251');после работы
Дело в все в том, что на сколько я понял ajax посылает только в utf8 и это нельзя изменить, в базе все в cp1251, вот я и сначала писал iconv, но ИЕ не работает так. А все другое нормально. я посмотрел что приходит перед iconv'ом и что после, в ИЕ перед приходит все нормально, а после соответственно бред, а например в опере, наоборот: сначала бред, а потом то что можно прочитать. Тут я окончательно запутался...
 
Сверху