- Home
- Categorie
- Coding e Sistemistica
- PHP
- caratteri accentati e str_replace
-
caratteri accentati e str_replace
Ciaooo!
devo metter su un semplice form di contatti. Il problema si presenta quando scrivo caratteri accentati, che codifica in simboli strani.
Ho letto che esiste la funzione str_replace ma non riesco a usarla.ecco il codice del sendmail:
/* * YOUR EMAIL *** */ $adminEmail = "[email protected]"; $subject = "Nuova mail"; /* * VALIDATE EMAIL *** */ function validateEmail($email){ return eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email); } /* * CHECK FORM *** */ $post = (!empty($_POST)) ? true : false; if($post) { $nome = stripslashes($_POST['name']); $cognome = stripslashes($_POST['cognome']); $message = ""; $message .= "Nome: ".$name."\n"; $message .= "Cognome: ".$cognome."\n"; $message .= "Messaggio: ".stripslashes($_POST['message']); $message = str_replace(array("à", "a"), '', $_POST['message']); /* codice che dovrebbe sostituire i caratteri accentati */ $error = ''; /* * CHECK MESSAGE *** */ if(!$message) { $error = "Please, type in a message."; } /* * CHECK MAIL *** */ if($email && !validateEmail($email)) { $error = "Please, check your e-mail address."; } /* * CHECK NAME *** */ if(!$name) { $error = "Please, type in your name."; } /* * ACTION *** */ $headers = "From: ".$name." <".$email.">\r\n" ."Reply-To: ".$email."\r\n" ."X-Mailer: PHP/" . phpversion(); if(!$error) { //WEBMASTER_EMAIL $mail = mail($adminEmail, $subject, $message, $headers); if($mail) { echo 'ok'; } } else { echo '<p>'.$error.'</p>'; } }
-
Ciao mrblade,
credo che ti venga più comodo utilizzare la funzione htmlentities in questo caso.
-
Non vorrei dire una minch***a ma sembra che il server dove è hostato il sito non abbia a disposizione il charset appropriato.
Il problema è che apparte gli accenti, il form verrà compilato anche in russo, e quindi con tutti i suoi caratteri...
Con il replace potrei sostituire i caratteri accentati con lettere normali...
-
@mrblade said:
con il replace potrei sostituire i caratteri accentati con lettere normali...
@Samyorn said:PHP 4, 5
Sintassi: mixed str_replace (mixed $search, mixed $replace, mixed $subject[, int $count])str_replace è una funzione di PHP che restituisce una stringa, o una matrice, sostituendo il valore (o i valori come vedremo di seguito) del parametro $replace a tutte le occorrenze $search contenute in $subject.
<? $str = 'Questo è un esempio'; $str = str_replace('un esempio', 'PHP', $str); echo $str; // risultato: Questo è PHP ?>
Dalla versione 5.0.0 di PHP è stato introdotto il parametro $count che restituisce il numero di occorrenze $search sostituite con il parametro $replace in $subject.
<? $str = 'Mollo'; $str = str_replace ('l', 't', $str, $count); echo $count; // risultato: 2 ?>
I parametri $search , $replace ed $subject possono essere anche degli array.
Qualora $subject fosse un array verranno sostituite tutte le occorrenze di ogni elemento di $subject.<? $str[0] = 'Mollo'; $str[1] = 'Bollo'; $str = str_replace ('ll', 'tt', $str); echo $str[0]; // risultato: Motto echo $str[1]; // risultato: Botto ?>
Se $search è un'array, ogni elemento dell'array verrà sostituito con il parametro $replace:
<? $str = 'Questo è un esempio'; $voc = array ('a', 'e', 'i', 'o', 'u'); $str = str_replace ($voc, '', $str); echo $str; // risultato: Qst è n smp ?>
Qualora $search ed $replace siano degli array con eguale numero di elementi, questi verranno sostituiti mantenendo l'ordine degli elementi che li costituiscono. Se gli elementi di $replace sono inferiori a quelli di $search, i rimanenti elementi di $search verranno sostituiti con stringhe vuote.
<? $str = 'Bevo tanta acqua, poco vino e mangio sempre'; $search = array ('tanta', 'poco', 'mangio'); $replace = array ('poca', 'molto', 'corro'); $str = str_replace ($search, $replace, $str); echo $str; // risultato: Bevo poca acqua, molto vino e corro sempre :D $str = 'Bevo tanta acqua, poco vino e mangio sempre'; $search = array ('tanta', 'poco', 'sempre'); $replace = array ('poca', 'molto'); $str = str_replace ($search, $replace, $str); echo $str; // risultato: Bevo poca acqua, molto vino e mangio ?>
Questa funzione è case sensitive pertanto il seguente codice potrebbe produrre risultati inaspettati:
$str = 'Questo è un esempio'; $voc = array ('a', 'E', 'i', 'O', 'u'); $str = str_replace ($voc, '', $str); echo $str; // risultato: Qesto è n esempo ?>
L?equivalente, non case sensitive, di questa funzione è str_ireplace();
http://www.giorgiotave.it/forum/funzioni-di-php/66300-stringhe-str_replace.html
-
Io ho fatto così ma senza risultato, continua a inviare simboli strani:
$message .= "Nome ".$name."\n"; $message .= "Messaggio ".stripslashes($_POST['message']); $search = array('à', 'è'); $replace = array ('a', 'e'); $message = str_replace($search, $replace, $message);
-
Ciao mrblade,
Il fatto che visualizzi i caratteri in quel modo dipende dall'utilizzo di caratteri del charset utf-8 (i caratteri accentati), con una pagina che non è dichiarata come charset utf-8.
Inoltre la str_replace non risolve il problema perché non è compatibile con quel charset.Innanzitutto, visto che dovrai utilizzare i caratteri cirillici, hai due strade:
La prima consiste nel trasformare tutto in utf-8.
Per farlo devi impostare il charset utf-8 sulla pagina html con il tag:
[html]<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />[/html]In secondo luogo devi accertarti di utilizzare solamente funzioni compatibili utf-8.
In più, se utilizzi dei database, è meglio impostare il db in utf-8 ed eseguire per prima cosa la query "SET NAMES UTF-8" subito dopo ogni connessione al database.L'alternativa a tutto questo è utilizzare la funzione htmlentities, come ti è stato suggerito da TheDarkITA, che trasforma i caratteri speciali in entità html, come ad esempio la trasformazione da "à" a "à".
Nel tuo caso la seconda opzione è la più semplice e immediata e tutto si risolverebbe con:
[php]$message .= "Nome ".$name."\n";
$message .= "Messaggio ".htmlentities(stripslashes($_POST['message'])); [/php]Un saluto,
Luca Bartoli