• User

    Problema con le lettere accentate in un modulo per i commenti

    Buongiorno a tutti. Sono giorni e giorni che cerco di risolvere un problema e non riesco. Premetto che non sono esperta di php e lo uso solo per i moduli di contatto all'interno di siti web scritti interamente in html5. Il problema e questo: sono riuscita a creare un semplicissimo modulo per i commenti senza database. I commenti vengono archiviati nel file comments.html. Per far apparire l'anteprima dei commenti nella pagina comments-form.html dove si trova anche il modulo di invio, uso un include jquery. Tutto funziona egregiamente, salvo che per il problema delle lettere accentate. Quando il testo del commento arriva nel file html le lettere accentate vengono riportate con questo simbolo di errore è. Su consiglio di alcuni, ho provato ad aggiungere questa stringa: $content = utf8_decode($_POST['message']); e ho ottenuto che le lettere accentate arrivassero in modo corretto nel file comments.html, ma dando ancora errore nell'anteprima inclusa nel file comments-form.html, dove appaiono cosi: �. Io credo che, per risolvere il problema, dovrei riuscire a far arrivare le lettere accentate come entity (es: &egrave ) nel file comments.html, ma malgrado che abbia tanto cercato e letto e chiesto, finora nessuno ha saputo aiutarmi concretamente. Spero che voi riusciate a darmi la soluzione giusta. Di seguito il codice php che sto utilizzando. Grazie mille in anticipo, attendo speranzosa.

    [PHP]
    <?php
    session_start();
    if ($_POST['captcha'] != $_SESSION['captcha']) {
    header("Location: ./error");
    die();
    }

    //filtro anti-spam invisibile
    else if($_POST['fred'] != "") {
    echo('<p style="color: #8B2323; font-size: 16px; font-weight: bold;">Invio fallito! Forse stai usando un browser testuale, oppure sei uno spambot.<br>Sending failed! You may be using a text-only browser, or you are a spambot.</p>');
    }

    //blocca url in textarea
    else if(preg_match("/\b(?:(?:https?|ftp|http)://|www.)[-a-z0-9+&@#/%?=~|!:,.;]*[-a-z0-9+&@#/%=~|]/i",$_POST['message'])){
    header("Location: ./no-url");
    die();
    }

    //impostazioni email
    else {
    if(isset($_POST['name'])) {

        $name = $_POST['name'];
        $email = ($_POST['email']);
        $message = ($_POST['message']);
        $emailmessage = "Un utente ha pubblicato un commento.
    

    Name: $name
    Email: $email
    Message: $message
    ";

                //Defining mail settings
    
        $to = "[email protected]";
        $subject = "Nuovo commento";
    
    
        if(isset($name)) {
                mail($to,$subject,$emailmessage);
    
            }
    

    }

    }

    if ($_POST){

    $name = $_POST['name'];
    $date = new DateTime();
    $date = $date->format("d.m.y - h:i:s");
    $content = $_POST['message'];
    $handle = fopen("comments.html","a");
    fwrite ($handle
    ,"<p><span style='color:red; background-color:transparent; font-weight:bold; font-size:12pt;'>" . $name . "</span><br>"
    . $date . "<br><em>"
    . $content . "</em></p><hr>\r\n");
    fclose ($handle);
    header("location: ./comments-form.html");
    }
    ?>

    [/PHP]


  • User Attivo

    Ciao hai provato a cambiare la codifica nel file html? ```
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />


  • User Attivo

    Ciao Cosina,

    a parte il fatto che non capisco l'utilità di jQuery nel mostrare i commenti (li potresti mostrare direttamente con PHP), ho provato a riprodurre la situazione che hai descritto e non ho riscontrato errori.

    Non ti occorre utf8_encode(), piuttosto devi utilizzare sempre la stessa codifica tra un file e l'altro. Le lettere accentate nel file dei commenti dovranno essere del tipo è (questa è una à)

    File comments-form.html

    pastebin.com/ZTFjpJXa

    File comments.php

    pastebin.com/MJbZ5qK2

    Ora che ti ho postato la soluzione però fatti un grandissimo favore, studiati la risorsa che ti avevo linkato su html.it, se hai messo online questo tuo codice non ci vuole molto ad iniettare codice malevolo, quantomeno sanitizza l'input utente 🙂