Uluslararası aksanı ve özel karakterler ile e-postalar göndermek

3 Cevap php

Ben İspanyolca PHP mail () yoluyla bir bülten yolluyorum, onlar aksan ve (: a, i, é, ñ ... Ben burada yapıştırmak için denemek için gidiyorum) özel karakterler var.

E-postanın HTML sürümü için, ben yazdırarak sorunu çözdüm á, é ...

Ancak düz metin sürümü için, ben sağ, ben bu koyamazsınız varsayıyorum?

What is the best thing to do, both for the HTML and plain text version? Later, I might have to send emails in more complex languages such as hebrew or chinese ...

Teşekkürler!

3 Cevap

Sen MIME kullanmanız gerekir. Posta başlıklarını ekle:

MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8

(Zaten bir MIME kullanıyorsanız multipart/alternative aynı posta HTML ve metin koymak, yerine metin parçası alt başlıklarında Content-Type: text/plain;charset=utf-8 koydu.)

Bu sizin "uluslararası" karakter göndermek olacak kodlaması UTF-8 olduğunu varsayarak. Birden fazla ülkede karşılamak üzere bekliyoruz UTF-8 senin uygulama boyunca kullanılacak kodlama sadece makul bir seçimdir, ama gerçekten bu konuda düşünce değil eğer henüz site bir Batı Avrupa kodlama varsaymak olabilir. Çince karakterler gibi şeyler postada onlar hakkında endişe önce sitenizde ve veritabanı düzgün çalıştığını kontrol edin.

Rayından: UTF-8 posta göndererek en etkili şey değil nerede yerel ayarlar vardır. Çin hakkında bilmiyorum, ama Japonya'da Unicode ile baş ve yerine böyle Shift-JIS olarak yerele özgü bir kodlama verilmesi olamaz biraz geriye doğru ve saçma posta sistemleri (özellikle webmail) hala vardır. Eğer bu pazarlara konsantre iseniz sık sık posta özel kodlanmış sürümlerini oluşturmak için iconv kullanmak zorunda bitireceğiz. Tatsız.

Birçok posta sunucuları posta vücutta ASCII olmayan karakterler ile baş edemez çünkü Şimdi, bunları kodlamak gerekir. Alıntı-yazdırılabilir ya da bunun için base64 seçebilirsiniz; quoted-printable, genellikle küçük ve de bunun ASCII karakterleri olan içerik için daha okunabilir:

Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello! An a-acute is =C3=A1

Bu formatta kodlamak için işlevi quoted_printable_encode. Eğer bu işlevi almak için makul bir up-to-date PHP gerekiyor Ancak; Eğer yoksa bunun yerine base64 için Content-Transfer-Encoding kurmak ve kullanmak olabilir base64_encode.

Son olarak, başlıklarında ASCII olmayan karakterler eklemek istiyorsanız (örneğin, From in, To veya Subject), tamamen farklı bir sözdizimi vardır:

Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?=

Ortasında o QW...== karışıklık base64_encode UTF-8 "Bir a-Akut A" olduğu durumlarda.

Á gibi aksanlı karakterler, i, e, ñ çoğu varsayılan tarayıcı encoing ayarı için düz metin üzerinde çalışır.

Çince karakterler gibi Asya olanlar genellikle çöp olduğu ortaya çevirmek olacaktır.

Evet, düz metin + HTML önerilen bir yoldur.

Lütfen E-posta içeriği UTF-8 olarak kodlanmış ve UTF-8 olarak e-posta gönderiyorsanız, o zaman Html veya Text kısmen uluslararası karakterlerin herhangi bir özel işleme kullanmak zorunda olmamalıdır.