- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problema con le lettere accentate in un modulo per i commenti
-
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: è ) 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]
-
Ciao hai provato a cambiare la codifica nel file html? ```
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-
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
File comments.php
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