[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция mail() искажает адрес в сообщении
Белилов
При использовании функции mail($recipient,$subject,$message,$headers) возникло искажение текста сообщения, когда текст содержит ссылку на интернет-страницу, содержащую знак равенства.
$message = 'http://foto-randewu.ru/Gruppa?NG=19';
В этом случае полученное E-mail содержит:
http://foto-randewu.ru/Gruppa?NG
или в шестнадцатеричном виде:
68 74 74 70 3A 2F 2F 66-6F 74 6F 2D 72 61 6E 64 77 75 2E 72 75 2F 47-72 75 70 70 61 2F 47 72 75 70 70 61 2E 70 68 70-3F 4E 47 72 75 70 70 61 19
Знак равенства исчез, а символы 19 превратились в шестнадцатеричный код 19.
Что это? Ошибка в функции MAIL или ..? Как с этим бороться?




Спустя 13 часов, 46 минут, 15 секунд (22.03.2010 - 14:28) Белилов написал(а):
Можно уточнить вопрос.
Оказывается, знак равенства и следующий за ним символ искажаются. И не только в URL, как я предполагал, а всегда.

Спустя 8 минут, 46 секунд (22.03.2010 - 14:37) jetistyum написал(а):
может корректно указывать заголовки кодировки?

Спустя 2 дня, 3 часа, 23 минуты, 29 секунд (24.03.2010 - 18:00) Белилов написал(а):
Цитата (jetistyum @ 22.03.2010 - 11:37)
может корректно указывать заголовки кодировки?

Уточните, что вы имеете в виду: аргумент $headers функции mail() или тег
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> ?
И что там должно стоять, по-вашему?

Спустя 2 часа, 28 минут, 13 секунд (24.03.2010 - 20:29) twin написал(а):
Тут почитай.

Спустя 1 день, 2 часа, 44 минуты, 14 секунд (25.03.2010 - 23:13) Белилов написал(а):
Цитата (twin @ 24.03.2010 - 17:29)
Тут почитай.

Спасибо за эту ссылку! Очень полезная и понятная статья.
При тестировании класса IRB_Mailer вместо каждого символа текста письма я получал вопросительный знак. И помогла замена строки « public $charset = 'utf-8';» на « public $charset = 'windows-1251';». Тогда текст стал читаемым не только в приложении к письму, а и в самом письме.
Может быть, надо позволить управлять этим при вызове класса? В каких случаях надо менять кодировку? Как?

Но вернусь к своему первому вопросу о искажении сообщения. Приведу содержание аргумента $messagе при вызове mail($recipient,$subject,$message,$headers):

--MIME_BOUNDRY
Content-Type: text/plain; charset="windows-1251"
Content-Transfer-Encoding: quoted-printable

http://foto-randewu.ru/Gruppa?NG=19

Знак равенства встречается здесь неоднократно. Это вредит? Если это ошибка, то как ее избежать?

Спустя 5 часов, 56 минут, 30 секунд (26.03.2010 - 05:09) twin написал(а):
Цитата
Может быть, надо позволить управлять этим при вызове класса?

Можно. Мне религия не позволяет. Если кто то мучается с местечковыми кодировками типа win и прочая, то это его право модифицировать класс. Я сделал возможность изменить кодировку руками, метод писать не стал, это против моих принципов. Потому что есть универсальная кодировка (utf-8), все остальное от лукаваго.

По вопросу не понял ничего. Причем тут знаки равенства?
Это ни какая не ошибка функции. Функция просто передает значения. А вот обработка уже идет дальше, на почтовом сервере или в почтовом клиенте.
Если письмо сформировано абы как, то конечно будут искажения, я все там подробно расписал.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.