Мой скрипт работает нормально, но я не понимаю, почему я должен использовать utf8_decode().

Я запутался в поведении utf8_decode() и хочу немного пояснений. Я надеюсь, что все в порядке.

Вот простая HTML-форма, которую я использую для захвата некоторого текста и сохранения его в моей базе данных MySQL (которая использует параметры сортировки 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>

Как видите, я закодировал это с помощью charset=utf8. в соответствующих местах. Мы принимаем текст, содержащий диакритические знаки (например, ñ, ó и т. д.). В конце мы запускаем небольшой скрипт для всего вводимого текста, чтобы проверить наличие диакритических знаков и изменить их на объекты HTML (например, ñ становится ñ).

Когда мой скрипт получает входные данные, я сначала должен выполнить utf8_decode($input), а затем запустить свой небольшой скрипт для проверки и изменения диакритических знаков по мере необходимости. Все работает нормально. Мне любопытно, почему я должен запускать декодирование на этом входе. Я понимаю, что utf8_decode преобразует строку, закодированную в UTF-8, в ISO-8859-1. Я хочу удостовериться — даже если все работает нормально (по крайней мере, я так думаю)— что я не делаю чего-то дурацкого, что настигнет меня позже. Например, я отправляю символы в кодировке ISO-8859-1 для хранения в моей базе данных, настроенной для хранения/обслуживания символов UTF-8. Должен ли я сделать что-то вроде запуска utf8_encode() для строки, которую возвращает мой скрипт преобразования диакритических знаков в сущности? Например:

$string = utf8_decode($string);
$search = explode(",","À,È,Ì,Ò,Ù,à,è,ì,ò,ù,Á,É,Í,Ó,Ú,Ý,á,é,í,ó,ú,ý,Â,Ê,Î,Ô,Û,â,ê,î,ô,û,Ã,Ñ,Õ,ã,ñ,õ,Ä,Ë,Ï,Ö,Ü,Ÿ,ä,ë,ï,ö,ü,ÿ,Å,å,Æ,æ,ß,Þ,þ,ç,Ç,Œ,œ,Ð,ð,Ø,ø,§,Š,š,µ,¢,£,¥,€,¤,ƒ,¡,¿");
$replace = explode(",","&Agrave;,&Egrave;,&Igrave;,&Ograve;,&Ugrave;,&agrave;,&egrave;,&igrave;,&ograve;,&ugrave;,&Aacute;,&Eacute;,&Iacute;,&Oacute;,&Uacute;,&Yacute;,&aacute;,&eacute;,&iacute;,&oacute;,&uacute;,&yacute;,&Acirc;,&Ecirc;,&Icirc;,&Ocirc;,&Ucirc;,&acirc;,&ecirc;,&icirc;,&ocirc;,&ucirc;,&Atilde;,Ntilde;,&Otilde;,&atilde;,&ntilde;,&otilde;,&Auml;,&Euml;,&Iuml;,&Ouml;,&Uuml;,&Yuml;,&auml;,&euml;,&iuml;,&ouml;,&uuml;,&yuml;,&Aring;,&aring;,&AElig;,&aelig;,&szlig;,&THORN;,&thorn;,&ccedil;,&Ccedil;,&OElig;,&oelig;,&ETH;,&eth;,&Oslash;,&oslash;,&sect;,&Scaron;,&scaron;,&micro;&cent;,&pound;,&yen;,&euro;,&curren;,&fnof;,&iexcl;,&iquest;");
$new_input = str_replace($search, $replace, $string);
return utf8_encode($new_input); // right now i just return $new_input.

Цените любое понимание, которое кто-либо может предложить по этому поводу.

9
задан bernie 22 March 2012 в 19:08
поделиться