В прошлом мне приходилось пытаться «исправить» ряд неработающих ситуаций с UTF8, и, к сожалению, это никогда не бывает легким, а зачастую довольно невозможным.
Если вы не можете точно определить, как он был сломан, и он всегда был сломан таким же образом, тогда будет трудно "отменить" ущерб.
Если вы хотите попытаться устранить ущерб, лучше всего начать с написания некоторого примера кода, в котором вы пытаетесь выполнить множество вариантов вызовов mb_convert_encoding (), чтобы посмотреть, сможете ли вы найти комбинацию «из» и « к 'это исправляет ваши данные. В конце концов, часто лучше даже не беспокоиться об исправлении старых данных из-за сопутствующих уровней боли, а просто исправить ситуацию в будущем.
Однако, прежде чем сделать это, вы должны убедиться, что вы в первую очередь исправили все, что вызывает эту проблему. Вы уже упоминали, что параметры сортировки и базы данных вашей БД установлены правильно. Но есть и другие места, где вам нужно проверить, чтобы убедиться, что все в порядке UTF-8:
- Убедитесь, что вы используете свой HTML как UTF-8:
- header ("Content-Type: text / html; charset = utf-8");
- Измените кодировку PHP по умолчанию на utf-8:
- ini_set ("default_charset", 'utf-8');
- Если ваша база данных ВСЕГДА не общается в utf-8, то вам может потребоваться указать это для каждого соединения, чтобы убедиться, что она работает в режиме utf-8, в MySQL вы делаете это, выпуская:
- Вам может потребоваться указать вашему веб-серверу, чтобы он всегда пытался общаться в UTF8, в Apache эта команда:
- Наконец, вам ВСЕГДА нужно убедиться, что вы используете функции PHP, которые соответствуют требованиям UTF-8. Это означает, что вы всегда должны использовать строковые функции в стиле mb _ *. Это также означает, что при вызове функций, таких как htmlspecialchars (), в конце необходимо включить соответствующий параметр кодировки 'utf-8', чтобы убедиться, что он не кодирует их неправильно.
Если вы пропустите какой-либо один шаг через весь ваш процесс, кодирование может быть искажено, и могут возникнуть проблемы. Как только вы попадаете в «канавку» выполнения utf-8, все это становится второй натурой. И, конечно же, PHP6, как предполагается, является полностью юникодной жалобой от getgo, что облегчит многое (надеюсь)