Saltar al contenido

Caracteres especiales de correo PHP en el campo de asunto

Este grupo de especialistas pasados varios días de trabajo y de juntar de información, obtuvimos los datos necesarios, deseamos que resulte de gran utilidad en tu trabajo.

Solución:

Prueba por tema:

$sub = '=?UTF-8?B?'.base64_encode($subject).'?=';

Y entonces:

mail($to, $sub, $message, $headers);

Si bien la respuesta aceptada funciona bien, hace que sea imposible leer el asunto al mirar los encabezados sin formato. Aquí hay una alternativa que mantiene la línea legible y también más corta si se compone principalmente de caracteres ASCII.

$subject = '=?UTF-8?q?' . quoted_printable_encode($subject) . '?=';

Aquí está la línea de asunto codificada de la respuesta aceptada:

=?UTF-8?B?4piFIFlvdXIgbmV3IGFjY291bnQ=?=

Aquí está la línea de asunto codificada de mi respuesta:

=?UTF-8?q?=E2=98=85 Your new account?=

Editar:

Resulta quoted_printable_encode() divide cadenas largas en varias líneas de un máximo de 75 caracteres, según lo requiere RFC 2045. El resultado es un string que no se puede usar con mail()‘s $subject parámetro. Aquí hay una versión actualizada para arreglar esto. También evitará la codificación de sujetos en ascii puro.

/**
 * Make sure the subject is ASCII-clean
 *
 * @param string $subject Subject to encode
 *
 * @return string Encoded subject
 */
function getEncodedSubject(string $subject): string 
    if (!preg_match('/[^x20-x7e]/', $subject)) 
        // ascii-only subject, return as-is
        return $subject;
    
    // Subject is non-ascii, needs encoding
    $encoded = quoted_printable_encode($subject);
    $prefix = '=?UTF-8?q?';
    $suffix = '?=';
    return $prefix . str_replace("=rn", $suffix . "rn  " . $prefix, $encoded) . $suffix;

Explicación:

$subj = "Lorem ipsuöm dolor sit amet, consectetur adipiscing elit. Praesent mattis molestie purus, non semper lectus dictum eget.";

Después quoted_printable_encode

Lorem ipsu=C3=B6m dolor sit amet, consectetur adipiscing elit. Praesent mat=
tis molestie purus, non semper lectus dictum eget.

Después str_replace

=?UTF-8?q?Lorem ipsu=C3=B6m dolor sit amet, consectetur adipiscing elit. Praesent mat?=
  =?UTF-8?q?tis molestie purus, non semper lectus dictum eget.?=

Reseñas y puntuaciones del artículo

Agradecemos que desees añadir valor a nuestro contenido informacional contribuyendo tu veteranía en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *