Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    36

    Problema lettere accentate in modulo commenti

    Buongiorno a tutti. Sto cercando di implementare un semplice box per i commenti in un sito in html5. Funziona cosi`: il form si trova nella pagina index.html del sito ed e` collegato al file comments.php in cui si trovano tutte le funzionalita`. Quando l'utente invia un commento, questo viene trascritto nel file comments.html. Dopodiche`, tramite un include jquery, tutti i commenti inviati appaiono nella pagina comments-form.html in un div posto sotto al form di invio. Tutto funziona benissimo, tranne che per il problema delle lettere accentate. All'inizio il problema si verificava all'interno del file comments.html, in cui, al posto delle lettere accentate, veniva trascritto questo simbolo di errore è � ripetuto fino a creare file infinite, mentre nell'anteprima nella pagina comments-form.html le lettere accentate erano riportate correttamente. Credevo di aver risolto aggiungendo la regola:

    Codice PHP:
    $content utf8_decode($_POST['message']); 
    In effetti, funziona nel file comments.html, dove le lettere accentate ora appaiono correttamente, ma adesso l'errore si e` trasferito nella pagina comments-form.html, dove al posto della lettera accentata si trova questo simbolo �.
    Non so come risolvere. Ho pensato di sostituire le lettere accentate con le rispettive entity, ma non sono capace di farlo da sola (sempre che sia la soluzione). Avete il consiglio giusto? Di seguito il codice incriminato attualmente in uso. Grazie mille per l'aiuto che vorrete darmi.

    Codice PHP:
    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");

    p.s. nella pagina comments-form.html e` presente il metatag metatag <meta charset="utf-8">

    Scusate, il simbolo di errore che appare ora nella pagina form-comments.html e` questo: Schermata 2019-01-15 alle 17.03.21.png
    Ultima modifica di Cosina; 15-01-2019 a 18:06

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2019
    residenza
    Sicilia
    Messaggi
    86
    Il tuo principale problema non sono le lettere accentate, ma il tuo codice!

    Ti lascio una preziosa risorsa che, chiunque voglia scrivere codice PHP un minimo decente dovrebbe conoscere come l'Ave Maria https://it.phptherightway.com/

    Leggila mi raccomando che non si può vedere ancora nel 2019 un codice privo di sanitizzazione dell'input utente.

    PHP comunque dispone della libreria mbstring per gestire correttamente i caratteri multibyte. E pensa che c'è anche il supporto ai database dove poter salvare i commenti

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    36
    Ti ringrazio, Flaviors200, per la tua risposta. Come ho detto, non sono esperta di PHP, ma sono una sviluppatrice HTML5 e i codici PHP che utilizzo, occasionalmente, per i moduli, non sono fatti da me (non sarei in grado), ma trovati in rete. In questo post ho riportato solo la parte in questione del codice utilizzato e che sto cercando di perfezionare con la mia scarsissima conoscenza di PHP. Anche leggendo la guida che, gentilmente, mi hai indicato, non so trovare la soluzione al mio problema. Il modulo in questione non necessita di database, ma archivia i commenti in un file html. Quello che mi serve e` un aiuto pratico, se possibile, altrimenti pazienza. Nel caso, se mi dite che puo` servire, postero` il codice per intero. Grazie, in ogni caso, per l'attenzione

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    Leggi il post in evidenza riguardo i caratteri strani, non ti servirà la parte che riguarda i database, ma il resto sì.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    36
    Grazie Alhazred, ho letto il post che mi hai indicato, ho fatto quanto scritto nella parte "Anche i file hanno un charset!" e non e` cambiato assolutamente nulla. La lettera accentata arriva nel file comments.html in questo modo è. Io vorrei che arrivasse (parlando un una è) sotto questa forma: &egrave;, in modo da non avere piu` problemi. Qualcuno sa dirmi se questo è possibile e come? Grazie mille per l'attenzione

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2019
    residenza
    Sicilia
    Messaggi
    86
    Ciao Cosina,

    oltre la risorsa del forum, ti avevo già linkato la soluzione. Ti linko la parte che interessa te https://it.phptherightway.com/#php_and_utf8, escludi il paragrafo "UTF-8 al livello del database" dato che non utilizzi database.

    Se vuoi fare le cose fatte bene in PHP devi utilizzare l'estensione mbstring, che è stata concepita proprio per risolvere il problema dei caratteri accentati, che PHP (e non solo) rappresenta con due byte anzichè uno.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2012
    Messaggi
    36
    Flaviors200, tu sei davvero molto gentile e mi rendo conto che avere a che fare con una come me che di php non capisce un accidenti non sia facile. Lo capisco, perche` e` la stessa cosa che capita a me quando ho a che fare con persone che non sanno nulla di html e di javascript. Ho letto con attenzione cio` che mi hai indicato, ho inserito nel codice le stringhe per la comunicazione con il browser (sperando di aver ben interpretato), ma proprio non ho capito dove devo aggiungere l'estensione mbstring che dici, ne' la funzione mb_* a cui accennano. A questo punto, per non farvi perdere altro tempo, posto il codice php completo. Se, a tempo perso, avete voglia di sistemarmelo con cio` che serve e gli manca, mi fate un grosso regalo. Se sto chiedendo troppo mi scuso e certo non insisto. In ogni caso vi ringrazio.

    codice:
    <?php
    
    // Comunica a PHP che useremo stringhe UTF-8 fino alla fine dello script
    mb_internal_encoding('UTF-8');
    
    // Comunica a PHP che invieremo stringhe UTF-8 al browser
    mb_http_output('UTF-8');
    
    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 = "mail@mail.com";
            $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");
    }
    ?>

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.