Все о переменном обзоре. Переменные, объявленные в сам выполняющий функцию, по умолчанию, только доступны для кодирования в сам выполняющий функцию. Это позволяет коду быть записанным без беспокойства того, как переменные называют в других блоках кода JavaScript.
, Например:
(function(){
var foo = 3;
alert(foo);
})();
alert(foo);
Это сначала предупредит "3" и затем бросит ошибку на следующее предупреждение, потому что нечто не определяется.
В прошлом мне приходилось пытаться «исправить» ряд неисправных ситуаций с UTF8, и, к сожалению, это никогда не было легко, а зачастую и невозможно.
Если вы не можете точно определить, как он был сломан, и он всегда ломался точно так же, тогда будет трудно «исправить» повреждение.
Если вы хотите попытаться устранить повреждение, лучше всего будет начать писать что-нибудь пример кода, в котором вы пытаетесь вызвать множество вариантов вызовов mb_convert_encoding (), чтобы увидеть, сможете ли вы найти комбинацию «от» и «до», которая исправляет ваши данные. В конце концов, часто лучше даже не беспокоиться об исправлении старых данных из-за связанных с этим трудностей, а вместо этого просто исправить ситуацию в будущем.
Однако, прежде чем делать это, вам нужно убедиться, что вы исправили все, что вызывает эту проблему. Вы уже упоминали, что параметры сортировки и редакторы таблиц БД настроены правильно. Но есть и другие места, где вам нужно проверить, что все правильно UTF-8:
Если вы пропустите какой-либо один шаг в ходе всего процесса кодирование может быть искажено и могут возникнуть проблемы. Однако как только вы попадаете в «паз» выполнения utf-8, все это становится вашей второй натурой. И, конечно же, PHP6 должен быть полностью жалобой на Unicode от getgo, что значительно упростит эту задачу (надеюсь)
Я знаю, что это не очень элегантно, но после того, как было упомянуто, что строки могут быть дважды закодированы, я сделал эту функцию:
function fix_double encoding($string)
{
$utf8_chars = explode(' ', 'À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö');
$utf8_double_encoded = array();
foreach($utf8_chars as $utf8_char)
{
$utf8_double_encoded[] = utf8_encode(utf8_encode($utf8_char));
}
$string = str_replace($utf8_double_encoded, $utf8_chars, $string);
return $string;
}
Кажется, это отлично работает для удаления двойное кодирование, которое я испытываю. Вероятно, мне не хватает некоторых персонажей, которые могут быть проблемой для других. Однако для моих нужд он работает отлично.
It looks like your utf-8 is being interpreted as iso8859-1 or Win-1250 at some point.
When you say "In my database I have a few instances of bad encodings" - how did you check this? Through your app, phpmyadmin or the command line client? Are all utf-8 encodings showing up like this or only some? Is it possible you had the encodings wrong and it has been incorrectly converted from iso8859-1 to utf-8 when it was utf-8 already?
Способ состоит в том, чтобы преобразовать в двоичную форму и затем исправить кодировку
Как указал Дэн: вам нужно преобразовать их в двоичный формат, а затем преобразовать/исправить кодировку.
Например, для utf8, сохраненного как latin1, следующий SQL исправит это:
UPDATE table
SET field = CONVERT( CAST(field AS BINARY) USING utf8)
WHERE $broken_field_condition
Если вы utf8_encode()
для строки, которая уже является UTF-8, то при многократном кодировании она выглядит искаженной.
Я сделал функцию toUTF8()
, которая преобразует строки в UTF-8.
Вам не нужно указывать кодировку ваших строк. Это может быть Latin1 (iso 8859-1), Windows-1252 или UTF8, или смесь этих трех кодировок.
Я сам использовал это на фиде со смешанными кодировками в одной строке.
Использование:
$utf8_string = Encoding::toUTF8($mixed_string);
$latin1_string = Encoding::toLatin1($mixed_string);
Другая моя функция fixUTF8()
исправляет искаженные строки UTF8, если они были закодированы в UTF8 несколько раз.
Usage:
$utf8_string = Encoding::fixUTF8($garbled_utf8_string);
Examples:
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
echo Encoding::fixUTF8("FÃÂédÃÂération Camerounaise de Football");
echo Encoding::fixUTF8("Fédération Camerounaise de Football");
will output:
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Fédération Camerounaise de Football
Download: