Jestem zdezorientowany co do zachowania utf8_decode() i po prostu chcę trochę wyjaśnienia. Mam nadzieję, że wszystko w porządku.Mój skrypt działa dobrze, ale jestem zdezorientowany, dlaczego muszę używać utf8_decode()
Oto prosty formularz HTML, który używam do przechwytywania jakiś tekst i zapisać go do mojej bazy danych MySQL (który używa sortowania 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>
Jak widać mam ten Coded za pomocą charset = utf8 w odpowiednich miejscach. Akceptujemy tekst zawierający znaki diakrytyczne (np., Ñ, ó itp.). Na koniec uruchamiamy mały skrypt na wszystkich wejściach tekstowych, aby sprawdzić znaki diakrytyczne i zmienić je na elementy HTML (np., Ñ staje się & ntilde;).
Po otrzymaniu danych wejściowych przez mój skrypt, najpierw muszę wykonać utf8_decode (wejście $), a następnie uruchomić mój mały skrypt, aby sprawdzić i zmienić znaki diakrytyczne w razie potrzeby. Wszystko dziala. Jestem ciekawy, dlaczego muszę uruchomić dekodowanie tego wejścia. Rozumiem, że utf8_decode konwertuje ciąg zakodowany w UTF-8 na ISO-8859-1. Chcę się upewnić - , mimo że wszystko działa dobrze (tak mi się wydaje) - że nie robię czegoś, co może mnie dogonić później. Na przykład, że wysyłam zakodowane znaki ISO-8859-1 do przechowywania w mojej bazie danych, która jest skonfigurowana do przechowywania/podawania znaków UTF-8. Czy powinienem zrobić coś takiego, jak uruchomić utf8_encode() na łańcuchu, który zwraca mój skrypt diakrytyczny do elementów? Np .:
$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.
Doceń każdy wgląd, jaki ktoś ma do zaoferowania na ten temat.
+1 za nieprzyznanie "działa" być wystarczająco dobrym – bernie