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

    Problema caratteri accentati in form di invio email

    Ciao a tutti.
    Ho un problema che, a quanto pare dalle mie ricerche su internet, è molto diffuso ma al quale cmq non sono riuscito a dare soluzione.

    Utilizzo un form da sito per permettere egli utenti di inviare email all'amministratore con tanto di allegato. Il problema risiede nella parte testuale e in particolare nei caratteri speciali e accentati. Vengono tradotti automaticamente in cose tipo "à èùòì".
    Ho fatto alcune prove per tentare di risolvere il problema.

    Ho provato a creare email in formato html, ma senza alcun risultato. I caratteri speciali vengono tradotti.

    Provando poi a bypassare il form e ad inserire il testo del messaggio direttamente nello script dell'innvio email, mi sono reso conto che il problema risiede nel passaggio del testo DAL FORM AL FILE DI INVIO EMAIL e quindi non nel comando mail() ma in quesllo POST del form.
    Vi posto i codici del form e dello script di invio mail. SApete darmi una spiegazione? Suggerirmi una funzione php che traduca ritraduca il testo trano "à èùòì" in caratteri accentati?
    Sono su server Aruba (sic).
    (scusate ho lasciato tutte le formattazioni da sito)

    Codice PHP:
                    <form name="invioemail" action="URL" method="POST" enctype="multipart/form-data">
                    
                    <input name="destinatario" type="hidden" value="<?php print"mia@email.it" ?>">
                    
                    <div class="titolo">Informazioni personali</div>
                    <div style="width:400px;">
                        <div><input name="nome" type="text" border="0" style="Verdana" value="" size="30"> Nome</div>
                        <div><input name="cognome" type="text" border="0" style="Verdana" value="" size="30"> Cognome</div>
                        <div><input name="provenienza" type="text" border="0" style="Verdana" value="" size="30"> Citt&agrave; - Universit&agrave;</div>
                    </div>
                    
                    <div class="titolo">Informazioni sul messaggio</div>
                    <div style="width:400px;">
                        <div><input name="mittente" type="text" border="0" style="Verdana" value="" size="30"> E-mail</div>
                        <div><input name="oggetto" type="text" border="0" style="Verdana" value="" size="30"> Oggetto</div>
                    </div>
                    
                    <div class="titolo">Immagine e descrizione</div>
                        <div style="width:550px;">
                        <div><input type="file" name="allegato" size="30"> Allegato[size="1"][b]*[/b] (max 1MB)[/size]</div>
                            <input name="maxsizefile" type="hidden" value="1000000">
                        <textarea name="messaggio" class="inputTextarea" rows="10" cols="70"></textarea>
                        <div>[size="1"]I campi contrassegnati con [b]*[/b] sono obbligatori.[/size]</div>
                        </div>
                    <div style="margin-top:10px; text-align:right;"><input class="button"  width="130" name="button" type="submit" border="0" value="Invia l'email"></div>
                    
                    </form>
    Codice PHP:
    <?php
    // Recupero il valore dei campi del form
    $destinatario $_POST['destinatario'];
    $mittente $_POST['mittente'];
    $nome $_POST['nome'];
    $cognome $_POST['cognome'];
    $provenienza $_POST['provenienza'];
    $oggetto $_POST['oggetto'];
    $messaggio $_POST['messaggio'];
    // Valorizzo le variabili relative all'allegato
    $allegato $_FILES['allegato']['tmp_name'];
    $allegato_type $_FILES['allegato']['type'];
    $allegato_name $_FILES['allegato']['name'];
    $allegato_size $_FILES['allegato']['size'];
    $maxsizefile $_POST['maxsizefile'];


    //*CONTROLLA INSERIMENTO VALORI*/
    //*CONDIZIONE: se se il file allegato eccede le dimensioni massime consentite*///
    if( $allegato_size $maxsizefile ){
        echo 
    "<h2 style=\"text-align:center;\">Invio email non effettuato.</h2>

    Il file inserito eccede le dimensioni massime consentite!
    <a href=\"javascript:(window.history.back(-1))\">Ritenta l'inserimento</a>.</p>"
    ;
                            
    //*CONDIZIONE: se i campi obbligatori sono stati riempiti*///
    } elseif (trim($mittente) == "" OR trim($nome) == "" OR trim($cognome) == "" OR trim($provenienza) == "" OR trim($oggetto) == "" OR trim($allegato) == "" OR trim($messaggio) == ""){
        echo 
    "<h2 style=\"text-align:center;\">Invio email non effettuato.</h2>

    I campi obbligatori devono essere riempiti!
    <a href=\"javascript:(window.history.back(-1))\">Ritenta l'inserimento</a>.</p>"
    ;

    //*SE TUTTO E' OK
    } else {

        
    // 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($filefilesize($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";
          
    $messaggio .= "\n\nINVIACI LE TUE FOTO - "$nome " " $cognome " da " $provenienza "\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 
    "<h2>Invio email effettuato.</h2>

    I contenuti sono stati inoltrati come segue:</p>
            

    $oggetto</p>
            

    $messaggio</p>
            "
    ;
        } else {
            echo 
    "<h2>Invio email non effettuato.</h2>

    Invio non riuscito! <a href=\"javascript:(window.history.back(-1))\">Ritenta l'invio</a>.</p>"
    ;
        }
        
    }            
    ?>
    All'uomo non verrà mai tanto male quanto dall'uomo.

  2. #2
    Nessuno? Provo ad uppare.
    UP!
    All'uomo non verrà mai tanto male quanto dall'uomo.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.