электронная почта в виде обычного текста из MySQL в php

Ситуация следующая. Я сохранил простое текстовое электронное письмо в MySQL, содержащее разрывы строк как \r\n. Когда мой php-скрипт должен отправить почту, он сначала заполняет некоторые параметры sprintf, а затем почта отправляется стандартной функцией mail().

Проблема, с которой я сталкиваюсь, заключается в том, что почтовый клиент (в моем случае Thunderbird) отображает эти разрывы строк, а не интерпретирует их.

Чтобы проверить свой сценарий, я жестко запрограммировал предложение по почте. Когда я это делаю, почта интерпретируется правильно. Моя первая мысль заключалась в том, что MySQL избегает обратной косой черты, поэтому я попытался сделать str_replace("\\\\", "\\", $str), но это не помогло.

Очевидно, я делаю неправильное предположение или глупую ошибку, но я этого не вижу. В чем может быть проблема?


person Daan Pape    schedule 13.07.2012    source источник
comment
почему бы вам не распечатать набор результатов запроса и не посмотреть, что именно возвращает mysql?   -  person Razvan    schedule 13.07.2012
comment
Я сделал печать $result['message'], и в браузере ничего не экранировано.   -  person Daan Pape    schedule 13.07.2012
comment
Тогда, очевидно, функция mail() экранирует ваши специальные символы   -  person Razvan    schedule 13.07.2012
comment
Функция mail() не избегает \r\n, когда я их жестко запрограммирую. Вот думаю может не в этом проблема?   -  person Daan Pape    schedule 13.07.2012


Ответы (3)


попробуйте заменить его вот так str_replace('\n\r', "\n\r"); Это может решить вашу проблему, если символы \n\r будут сохранены в вашем сообщении как четыре отдельных символа. Если вы ввели их с помощью, например, phpmyadmin, они будут сохранены как 4 символа, а не 2 символа, как вы ожидаете.

Надеюсь, поможет!

person bkwint    schedule 13.07.2012
comment
Спасибо, это решает проблему. Я действительно ввел тестовый адрес электронной почты в phpMyAdmin. - person Daan Pape; 13.07.2012
comment
обратите внимание, если вы поместите escape-символы между одинарными кавычками, они не будут экранированы. Если вы поместите их между двойными кавычками, они будут экранированы! Однако это неверно для \'. Источник \' будет экранирован, если он помещен между одинарными кавычками. - person bkwint; 13.07.2012

Попробуйте использовать var_dump для вывода сообщения, это может дать более точную информацию о значении строки.

person Alistair Burns    schedule 13.07.2012
comment
Теперь я попробовал var_dump, но он не показывает экранированные символы. - person Daan Pape; 13.07.2012

Возможно, используйте это, чтобы убрать и удалить косые черты:

stripslashes($str);
person Alistair Burns    schedule 13.07.2012
comment
Нет, почтовый клиент показывает rn вместо `\r\n'. Действительно странно. - person Daan Pape; 13.07.2012