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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> iconv неправильная перекодировка 
:(
    Опции темы
$дмитрий
  Дата 18.11.2011, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 45



Принимаю почту через поток ввода, перекодирую письмо из utf-8 в cp1251 с помощью iconv

Заметил интересный баг  smile 
Если в Subject будет буква верхнего регистра "И" или "Э", то iconv возвращает обрезанный текст

Пример, как должно быть
Код

To: [email protected]
Subject: ПРИВЭТ
Content-Type: text/plain; charset="utf-8"
From: [email protected]

ПРИВЭТ


Как обрезается письмо
Код

To: [email protected]
Subject: ПР


Теперь убираем букву "И" и получаем
Код

To: [email protected]
Subject: ПРВ


Убираем букву "Э", письмо нормально конвертируется

После серии экспериментов выяснилось следующие:
1. Из всего алфавита глючат именно эти буквы, причем конкретно с Subject, в других заголовках такой проблемы нет
2. Тело письма также конвертируется нормально с любыми буквами

Причина происходящего?
PM MAIL   Вверх
$дмитрий
Дата 18.11.2011, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 45



iconv считает это Detected an illegal character in input string, чем не угодили ему эти буквы?
PM MAIL   Вверх
bobik02
Дата 18.11.2011, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 14



Только что проверил на линуксе с iconv (GNU libc) 2.3.6.

Например:
Код

iconv -f UTF-8 -t WINDOWS-1251 1.txt > 2.txt

1.txt
Код

To: [email protected]
Subject: ПРИВЭТ
Content-Type: text/plain; charset="utf-8"
From: [email protected]
ПРИВЭТ


Отработало без каких либо ошибок и предупреждений. Правда через функции php не пробовал. 


--------------------
Have a nice day
PM   Вверх
$дмитрий
Дата 18.11.2011, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 45



bobik02, если файлы конвертить или строчки все работает, проблема именно в поточной перекодировке
PM MAIL   Вверх
bobik02
Дата 19.11.2011, 00:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 14



Тогда странное поведение. Ищи. smile 
Можно поток перенапрвлять в файл потом кодировать, что криво и накладно,  или с //TRANSLIT заюзать что тоже плохо. 
А можно еще и отказаться от iconv и заюзать функцию перекодировки.
аля
http://mihalytch.org.ua/programming/php/co...p1251-utf8.html
http://yapro.ru/web-master/php/psevdo-iconv.html

Цитата($дмитрий @  18.11.2011,  18:40 Найти цитируемый пост)
Принимаю почту через поток ввода

Точно stdin ? 





Это сообщение отредактировал(а) bobik02 - 19.11.2011, 00:59


--------------------
Have a nice day
PM   Вверх
Lols
Дата 19.11.2011, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Странно,у меня этого бага нет. вы нашли причину?
PM MAIL   Вверх
$дмитрий
Дата 19.11.2011, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 17
Всего: 45



bobik02, вчера проверял на самодельных функциях перекодировки, результат примерно тот же. Спотыкается на тех же буквах(а значит буквах реально кривые, кто их портит неясно)
Lols, продолжаю искать причину уже ради спортивного интереса )

Кому интересно по экспериментировать, вот код:
php.ini
Код

sendmail_path = "C:\XAMPP\php\php.exe -f C:\XAMPP\mail.php"


mail.php
Код

file_put_contents('C:/XAMPP/tmp/mail/'.date('Y-m-d H.i.s').'.php', iconv('utf-8', 'cp1251', file_get_contents("php://stdin")));


send.php
Код

mail('[email protected]', 'ПРИВЭТ', 'ПРИВЭТ', "Content-Type: text/plain; charset=\"utf-8\"\nFrom: [email protected]\n");


Файлы должны быть в кодировке utf-8

Это сообщение отредактировал(а) $дмитрий - 19.11.2011, 13:54
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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