Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > PHP > В письме, отправленном через PHP mail некоторые буквы в словах заменяются на �


Автор: ViH 14.11.20, 09:48
Подскажите, пожалуйста, в чем тут проблема? Например, такой код:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    <?
    $text = 'PHP – это широко используемый язык сценариев общего назначения с открытым исходным кодом.
    Говоря проще, PHP это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на Web-сервере. Аббревиатура PHP означает "Hypertext Preprocessor (Препроцессор Гипертекста)". Синтаксис языка берет начало из C, Java и Perl. PHP достаточно прост для изучения. Преимуществом PHP является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц. Подробнее о преимуществах PHP можно узнать здесь.
    Важным преимуществом языка PHP перед такими языками, как языков Perl и C заключается в возможности создания HTML документов с внедренными командами PHP. Подробнее об этой возможность смотрите здесь. Значительным отличием PHP от какого-либо кода, выполняющегося на стороне клиента, например, JavaScript, является то, что PHP-скрипты выполняются на стороне сервера. Вы даже можете сконфигурировать свой сервер таким образом, чтобы HTML-файлы обрабатывались процессором PHP, так что клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат выполнения скрипта. PHP позволяет создавать качественные Web-приложения за очень короткие сроки, получая продукты, легко модифицируемые и поддерживаемые в будущем. PHP прост для освоения, и вместе с тем способен удовлетворить запросы профессиональных программистов. Даже если Вы впервые услышали о PHP, изучить этот язык не составит для Вас большого труда. Мы не сомневаемся, что изучив основы PHP в течение нескольких часов, вы уже сможете создавать простые PHP-скрипты. Язык PHP постоянно совершенствуется, и ему наверняка обеспечено долгое доминирование в области языков web-программирования, по крайней мере, в ближайшее время.';
    $headers= "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8";
    mail("my_mail@example.com", "Test", $text, $headers);
    echo( $text);

Проблема в том, что в полученном письме в некоторых словах буквы заменяются на � (знак вопроса в ромбе). Если менять отправляемый текст, то проблема сохраняется.
Вот пример полученного текста:
PHP – это широко используемый язык сценариев общего назначения с открытым исходным кодом. Говоря проще, PHP это язык программирования, специально разработанный для написания web-приложений (сценариев), исполняющихся на Web-сервере. Аббревиатура PHP означает "Hypertext Preprocessor (Препроцессор Гипертекста)". Синтаксис языка берет начало из C, Java и Perl. PHP достаточно прост для изучения. Преимуществом PHP является предоставление web-разработчикам возможности быстрого создания динамически генерируемых web-страниц. Подробнее о преимуществах PHP можно узнать здесь. Важным преимуществом языка PHP перед такими языками, как языков Perl и C заключается в возможности создания HTML документов с внедренными командами PHP. Подробнее об этой возможность смотрите здесь. Значительным отличием PHP от какого-либо кода, выполняющегося на стороне клиента, например, JavaScript, является то, что PHP-скрипты выполняются на стороне сервера. Вы даже можете сконфигурировать свой сервер таким образом, чтобы HTML-файлы обрабатывались процессором PHP, так что клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат вы� �олнения скрипта. PHP позволяет создавать качественные Web-приложения за очень короткие сроки, получая продукты, легко модифицируемые и поддерживаемые в будущем. PHP прост для освоения, и вместе с тем способен удовлетворить запросы профессиональных программистов. Даже если Вы впервые услышали о PHP, изучить этот язык не составит для Вас большого труда. Мы не сомневаемся, что изучив основы PHP в течение нескольких часов, вы уже сможете создавать простые PHP-скрипты. Язык PHP постоянно совершенствуется, и ему наверняка обеспечено долгое доминиро� �ание в области языков web-программирования, по крайней мере, в ближайшее время.

Дополнено:
Эта проблема проявляется на хостинге BlueHost. На другом хостинге Beget такой проблемы нет. Писал в службу поддержки BlueHost — решения не знают (

Автор: ViH 14.11.20, 16:53
Помогли на Stackoverflow! Такое решение:
Цитата
Единственный нормальный способ обойти это, который я вижу — преобразуйте тело в base64 с доп. заголовком: Content-Transfer-Encoding: base64
Согласно RFC 2045 стоит ещё самому на чанки(по 76 байт) порубить:
$body = chunk_split(base64_encode($body));

Автор: negram 18.11.20, 21:08
Всё так, до сих пор существуют околопочтове ПО, что не воспринимает 8битную кодировку :/
Не на хостинге так на почтовом сервисе

Автор: goolybad 07.02.21, 17:45
Текст сами набираете?

Автор: lexanoid 23.10.21, 09:41
Цитата negram @

OperaMail таким балуется
По сабжу:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    $headers = 'Content-type: text/html; charset="utf-8"';

должна быть именно ТАКОЙ, и никакой другой, если только Вы не используете другую кодировку (charset). Важную роль играют одинарные и двойные кавычки в этой строке. Если в письме НЕ будет html тегов, а просто текст, то можно эту строку писать так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    $headers = 'Content-type: text/plain; charset="utf-8"';

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)