Sono confuso circa il comportamento di utf8_decode() e voglio solo un piccolo chiarimento. Spero che sia ok.Il mio script funziona bene, ma sono confuso sul motivo per cui devo usare utf8_decode()
Ecco un semplice modulo HTML che sto usando per catturare un po 'di testo e salvarlo al mio database MySQL (che utilizza le regole di confronto utf8_general_ci):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form action="update.php" method="post" accept-charset="utf-8">
<p>
Title: <input type="text" name="title" id="title" accept-charset="utf-8" size="75" value="" />
</p>
<p>
<input type="submit" name="submit" value="Submit" />
</p>
</form>
</body>
</html>
Come potete vedere ho questo Coded con charset = utf8 nei luoghi appropriati. Accettiamo testi che includono segni diacritici (ad es., Ñ, ó, ecc.). Alla fine, eseguiamo un piccolo script su tutto l'input di testo per controllare i segni diacritici e cambiarli in entità HTML (ad es., Diventa & ntilde;).
Quando l'input viene ricevuto dal mio script, prima devo fare utf8_decode ($ input) e poi eseguire il mio piccolo script per verificare e modificare i segni diacritici secondo necessità. Tutto funziona bene Sono curioso di sapere perché devo eseguire la decodifica su questo input. Comprendo che utf8_decode converte una stringa codificata in UTF-8 in ISO-8859-1. Voglio assicurarmi - anche se tutto funziona bene (o almeno così penso) - che non sto facendo qualcosa di matto che mi raggiungerà più tardi. Ad esempio, sto inviando caratteri codificati ISO-8859-1 per essere memorizzati nel mio database che è impostato per memorizzare/servire caratteri UTF-8. Dovrei fare qualcosa come eseguire utf8_encode() sulla stringa restituita dallo script diacritics-to-entities? Ad esempio:
$string = utf8_decode($string);
$search = explode(",","À,È,Ì,Ò,Ù,à,è,ì,ò,ù,Á,É,Í,Ó,Ú,Ý,á,é,í,ó,ú,ý,Â,Ê,Î,Ô,Û,â,ê,î,ô,û,Ã,Ñ,Õ,ã,ñ,õ,Ä,Ë,Ï,Ö,Ü,Ÿ,ä,ë,ï,ö,ü,ÿ,Å,å,Æ,æ,ß,Þ,þ,ç,Ç,Œ,œ,Ð,ð,Ø,ø,§,Š,š,µ,¢,£,¥,€,¤,ƒ,¡,¿");
$replace = explode(",","À,È,Ì,Ò,Ù,à,è,ì,ò,ù,Á,É,Í,Ó,Ú,Ý,á,é,í,ó,ú,ý,Â,Ê,Î,Ô,Û,â,ê,î,ô,û,Ã,Ntilde;,Õ,ã,ñ,õ,Ä,Ë,Ï,Ö,Ü,Ÿ,ä,ë,ï,ö,ü,ÿ,Å,å,Æ,æ,ß,Þ,þ,ç,Ç,Œ,œ,Ð,ð,Ø,ø,§,Š,š,µ¢,£,¥,€,¤,ƒ,¡,¿");
$new_input = str_replace($search, $replace, $string);
return utf8_encode($new_input); // right now i just return $new_input.
Apprezzare qualsiasi opinione che qualcuno ha da offrire su questo.
+1 per non lasciare che "funzioni" essere abbastanza buono – bernie