Испанский Акцент Знаки в Форме Представления - PullRequest
3 голосов
/ 11 мая 2011

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

Если я отправлю следующее:

Проверка меток акцента é í ó ú -

Я получаю следующее в теле моегоэлектронная почта ...

Тестирование меток Accent áà © à ó ú à ±

Код, который обрабатывает электронную почту, просто помещает информацию $ _POST непосредственно втело письма.Я предполагаю, что мне нужно иметь htmlentities () или что-то еще, но я пробовал, и ничего не работает ...

Мне также нужно будет поместить те же данные в базу данных MySQL и получить их позже.Что мне нужно знать, когда я это делаю?

Спасибо!Drew

Ответы [ 4 ]

3 голосов
/ 11 мая 2011

Вы коснулись тонкой темы кодировок.Попробуйте создать и преобразовать все в UTF-8.База данных, файлы, формы и тому подобное.Посмотрите в Интернете некоторую информацию о том, какой заголовок использовать в электронном письме, чтобы сделать его utf-8.Также конвертируйте ваши электронные письма из стандартных 7-битных в 8-битные с этими заголовками.

"Content-Type: text/plain; charset=utf-8"
"Content-Transfer-Encoding: 8bit"

Для базы данных вам необходимо установить, в случае mysql, параметры сортировки.

1 голос
/ 11 мая 2011

Чтобы ответить на ваш вопрос о хранении данных в базе данных:

После того, как вы открыли соединение с MySQL с помощью mysql_connect (), отправьте следующий запрос в качестве первой команды:

mysql_query("SET NAMES utf8");

(или mysqli_query (), в зависимости от используемой вами библиотеки).

Эта команда сообщает базе данных MySQL, что:

  • все данные, которые вы будете предоставлять, будут кодируется как UTF-8 и
  • вы также хотите получить все в UTF-8.

Строго говоря, сама база данных может быть в любом порядке сортировки и кодирования (MySQL с радостью транскодирует все для вас на лету), но, конечно, лучше иметь базу данных также в UTF-8.

0 голосов
/ 11 мая 2011

Ваш скрипт получает данные, закодированные в UTF-8, но ваш почтовый клиент считает, что электронная почта закодирована в Latin-1. Есть два способа решить эту проблему: добавить в электронное письмо заголовок, указывающий, что кодировка символов - UTF-8, или использовать utf8_decode() в отправленном контенте (если вы уверены, что когда-либо будете использовать только символы Latin-1) .

0 голосов
/ 11 мая 2011

Если вы используете объекты utf8, вам необходимо сначала кодировать их base64:

$subject = "=?utf-8?b?".base64_encode($subject)."?=";

И установите тип содержимого следующим образом:

$headers.="Content-Type: text/html; charset=utf-8\r\n";

Я также рекомендую использовать систему типа SwiftMailer для предотвращения атак с использованием заголовков. Я считаю, что для части базы данных лучше было бы получить отдельный вопрос, чтобы получить правильные теги и более сфокусированные ответы.

...