0

I use phpMailer (as of today version in GitHub) to send automatic smtp activation mails from my noreply@host.com.

I tried it in gmail and yahoo. Both interpreted the characters as shown below.

nice      unwanted (realized)
Ç    ->     Ç
ı    ->     Ä
ş    ->     Åž

mailing process order is:

  1. "sign page" (has the form, utf-8 encoded), then
  2. "assess_from_sign.php" (pure php without any encoding command. actual sending or failure process is here),then
  3. "inform page" (informs user for result)

my message in mail body starts with Dear $_POST['username']

What can I apply to $_POST['username'] variable in assess_from_sign.php page so even non-English characters seems exactly like in their own language.

note: all requests are redirecting to index.php page in my site and it has mb_internal_encoding("UTF-8"); command which applies to all pages.

thanks, regards

Andre Chenier
  • 1,166
  • 2
  • 18
  • 37
  • Set PHP headers to UTF8 (`header('Content-Type: text/html; charset=utf-8');`), set the mailer-object to UTF8 (`$mail->CharSet = 'UTF-8';`) and HTML header to UTF8 (``) and try again. You might also need to check the actual file's encoding. Basically, you want to set all aspects of your code to the same charset, and UTF8 covers nearly everything you'd need, so I recommend that. – Qirel May 22 '16 at 13:36
  • thanks Qirel, i'll give feedback after doing what you told – Andre Chenier May 22 '16 at 13:38
  • 1
    for my pure `assess_from_sign.php` page I applied `header('Content-Type: text/html; charset=utf-8');` and in my PHPMailer settings, I applied `$mail->CharSet = 'UTF-8';`. Now it seems nice. Thanks Qirel, may you please convert your comment to answer for me to accept. – Andre Chenier May 22 '16 at 13:50

1 Answers1

3

It's important that all aspects of the code is set to the same, specific charset. I recommend UTF-8 as you already started using, which covers most characters you'll ever need.

Below you'll find a "checklist" of what should be set to UTF-8.

  • PHP header - this has to be put prior to any output to the browser, and should be put on the top of all your .php pages: header('Content-Type: text/html; charset=utf-8');

  • HTML header - this should also be in all your pages containing HTML, and it to be put inside the <head> tags: <meta charset=utf-8" />

  • PHPMailer Object - specify the charset of your PHPMailer object by adding
    $mail->CharSet = 'UTF-8';, where $mail is the object itself.

  • File-encoding: The file itself should be converted to a UTF8 charset (specifically UTF8 w/o BOM). This varies a bit on what kind of texteditor your are using, but in Notepad++ it's Format -> Convert to UTF8 (w/o Byte Order Mark).

There might be other aspects of your code that need to be set to an UTF8 charset (databases and such), but this should cover the mail-properties.

You can also reference UTF-8 all the way through.

Community
  • 1
  • 1
Qirel
  • 25,449
  • 7
  • 45
  • 62