Si alguna vegada heu programat una funció per enviar correu fent servir php, potser us heu trobat amb un problema de codificació en el nostre idioma.
La situació és la següent. Imagineu un tros de codi en php com aquest (el codi no és meu):
$to = $adminemail;
$from = $senderemail;
$subject = utf8_decode(urldecode($Mensaje[12])) . utf8_decode(urldecode($Mensaje[7])) . $uname . utf8_decode(urldecode($Mensaje[5])) . $emp . "";
$headers = "MIME-Version: 1.0rn".
"Content-type: text/html; charset=utf-8rn".
"From: "Webpage of mine" <".$from.">rn".
"To: "My name" <".$to.">rn".
"Date: ".date("r")."rn".
"Subject: ".$subject."rn";
$message = "
...
$response = mail($to, $subject, $message, $headers);
Cap problema.
El problema ve quan intentem posar les dades en català:
$to = $adminemail;
$from = $senderemail;
$subject = utf8_decode(urldecode($Mensaje[12])) . utf8_decode(urldecode($Mensaje[7])) . $uname . utf8_decode(urldecode($Mensaje[5])) . $emp . "";
$headers = "MIME-Version: 1.0rn".
"Content-type: text/html; charset=utf-8rn".
"From: "Pàgina web de València" <".$from.">rn".
"To: "Dénia i Xàtiva" <".$to.">rn".
"Date: ".date("r")."rn".
"Subject: ".$subject."rn";
$message = "
...
$response = mail($to, $subject, $message, $headers);
En aquest cas, si no vaig enganyat, el receptor del correu electrònic rebrà un correu amb un camp "De" amb errors de codificació, és a dir, rebrà un correu amb:
De: P?gina web de Val?ncia
A: D?nia i X?tiva
Per solucionar el problema de codificació, cal dir-li a la funció mail que les capçaleres estan codificades en utf-8.
Això ho pots fer a mà posant un tros de codi per a cada línia del tipus:
$headers = 'To: =?UTF-8?B?'.base64_encode("Dénia i Xàtiva").'?=';
però segur que tindreu algun error en implementar-ho.
Jo preferisc, en canvi, fer servir la funció mb_encode_mimeheader(), de manera que la funció quedaria així (el codi és meu):
$to = $adminemail;
$from = $senderemail;
$subject = utf8_decode(urldecode($Mensaje[12])) . utf8_decode(urldecode($Mensaje[7])) . $uname . utf8_decode(urldecode($Mensaje[5])) . $emp . "";
$headers = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/html; charset="UTF-8"";
$headers[] = "From: ".mb_encode_mimeheader("Pàgina web de València", "UTF-8", "B") ." <".$from.">";
$headers[] = "To: ".mb_encode_mimeheader("Dénia i Xàtiva", "UTF-8", "B") ." <".$to.">";
$headers[] = "Date: ".date("r");
$headers[] = "Subject: ".mb_encode_mimeheader($subject, "UTF-8", "B");
$headers = implode("rn", $headers);
$message = "
...
$response = mail($to, $subject, $message, $headers);
Solucionat!
Si us heu trobat amb el mateix i ho heu fet d'altra forma, ja avisareu.