Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Codificare i caratteri accentati per inviarli tramite mail

    Salve.
    Ho una form con all'interno una textarea.
    Quando clicco sul pulsante submit, viene chiamata un'altra pagina php che si occupa di recuperare i dati scritti nella textarea, registrarli in un database Mysql e di inviarli per e_mail tramite php.
    All'inizio i caratteri accentati mi venivano sostituiti da caratteri strani e così ho provato a cambiare la codifica del testo recuperato dalla textarea nel seguente modo:
    $messaggio = mb_convert_encoding($_POST['messaggio'],'Windows-1252','UTF-8');
    Adesso nel database i caratteri accentati vengono registrati correttamente mentre chi riceve le mail riceve il carattere "?" al posto del carattere accentato.
    Probabilmente le mail utilizzano un altra codifica.
    Potete darmi qualche consiglio?
    Grazie mille.
    Maria

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Prova così

    $messaggio = mb_convert_encoding($_POST['messaggio'],'UTF-8');

  3. #3
    Purtroppo non funziona, continuo a ricevere le mail con i caratteri accentati sostituiti dal "?".
    Non sò come mai, fatemi sapere se devo postare il codice.
    Grazie, comunque, della risposta.
    Maria

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Ma le email le invii in formato HTML o in plain text?

  5. #5
    Se invia l'email come html, prova a specificare la codifica.
    CODENCODE \ Branding \ Design \ Marketing
    www.codencode.it

  6. #6
    Mi hai fatto una domanda difficile in quanto non conosco il sistema plain text per cui, per esclusione, direi HTML.
    Questo problema c'è l'ho da diverso tempo e che non riesco a risolvere.
    Posto il codice ridotto al minimo, ti sarei grata se mi dicessi dove sbaglio.
    Grazie.
    Maria

    $mittente = $_POST['mittente'];
    $destinatario = $_POST['destinatario'];
    $oggetto = $_POST['oggetto'];
    $messaggio = mb_convert_encoding($_POST['messaggio'],'UTF-8');
    // Valorizzo le variabili relative all'allegato
    $allegato = $_FILES['allegato']['tmp_name'];
    //$allegato = $_POST['allegato'];
    $allegato_type = $_FILES['allegato']['type'];
    $allegato_name = $_FILES['allegato']['name'];

    // Creo 2 variabili che riempirò più avanti...
    $headers = "From: " . $mittente;
    $msg = "";

    // Verifico se il file è stato caricato correttamente via HTTP
    // In caso affermativo proseguo nel lavoro...
    if (is_uploaded_file($allegato))
    {
    // Apro e leggo il file allegato
    $file = fopen($allegato,'rb');
    $data = fread($file, filesize($allegato));
    fclose($file);

    // Adatto il file al formato MIME base64 usando base64_encode
    $data = chunk_split(base64_encode($data));

    // Genero il "separatore"
    // Serve per dividere, appunto, le varie parti del messaggio.
    // Nel nostro caso separerà la parte testuale dall'allegato
    $semi_rand = md5(time());
    $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

    // Aggiungo le intestazioni necessarie per l'allegato
    $headers .= "\nMIME-Version: 1.0\n";
    $headers .= "Content-Type: multipart/mixed;\n";
    $headers .= " boundary=\"{$mime_boundary}\"";

    // Definisco il tipo di messaggio (MIME/multi-part)
    $msg .= "This is a multi-part message in MIME format.\n\n";

    // Metto il separatore
    $msg .= "--{$mime_boundary}\n";

    // Questa è la parte "testuale" del messaggio
    $msg .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
    $msg .= "Content-Transfer-Encoding: 7bit\n\n";
    $msg .= $messaggio . "\n\n";

    // Metto il separatore
    $msg .= "--{$mime_boundary}\n";

    // Aggiungo l'allegato al messaggio
    $msg .= "Content-Disposition: attachment;\n";
    $msg .= " filename=\"{$allegato_name}\"\n";
    $msg .= "Content-Transfer-Encoding: base64\n\n";
    $msg .= $data . "\n\n";

    // chiudo con il separatore
    $msg .= "--{$mime_boundary}--\n";
    }
    else
    {
    $msg = $messaggio;
    }

    // Invio la mail
    if (mail($destinatario,$oggetto,$msg,$headers))
    {
    echo "email inviata";
    }

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,508
    Prova così
    $messaggio = htmlentities($_POST['messaggio']);

  8. #8
    Ho effettuato la modifica come mi hai detto tu ma niente da fare.
    Ho inviato una mail con i seguenti caratteri accentati: èéìòàù e mi è arrivata una mail in questo modo:
    èéìÃ&s up2;Ãù

    Non sò da cosa può dipendere.
    Maria

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.