Это проблема кодировки. Таким образом, он может работать неправильно на многих разных уровнях, но, скорее всего, строки в вашей базе данных закодированы в формате utf-8, и вы представляете их как iso-8859-1. Или наоборот.
Правильный способ решить эту проблему - это правильно настроить наборы символов. Самая простая стратегия, поскольку вы используете PHP, заключается в использовании iso-8859-1 во всем приложении. Для этого необходимо убедиться, что:
- Все исходные файлы PHP сохраняются как iso-8859-1 (не путать с cp-1252).
- Ваш веб-сервер настроен на обслуживание файлов с
charset=iso-8859-1
- Кроме того, вы можете переопределить настройки веб-серверов из PHP-документа, используя
header
.
- Кроме того, вы можете вставить метатег в свой HTML-код, который определяет то же самое, но это не является строго необходимым.
- Вы можете также указать атрибут
accept-charset
в элементах <form>
.
- Таблицы базы данных определены с кодировкой как latin1
- Соединение с базой данных между PHP и базой данных установлено на latin1
Если у вас уже есть данные в вашей базе данных, вы должны знать, что они, вероятно, уже испорчены. Если вы еще не в стадии производства, просто вытрите все это и начните все сначала. В противном случае вам придется выполнить некоторую очистку данных.
Примечание к метатегам, поскольку все неправильно понимают, что они из себя представляют:
Когда веб-сервер обслуживает файл (HTML-документ), он отправляет некоторую информацию, которая не отображается непосредственно в браузере. Это известно как HTTP-заголовки. Одним из таких заголовков является заголовок Content-Type
, который указывает mimetype файла (например, text/html
), а также кодировку (также известную как charset).
Хотя большинство веб-серверов отправляют заголовок Content-Type
с информацией charset
, это необязательно. Если его нет, браузер вместо этого будет интерпретировать любые метатеги с http-equiv="Content-Type"
. Важно понимать, что метатег интерпретируется только только , если веб-сервер не отправляет заголовок. На практике это означает, что она используется только в том случае, если страница сохранена на диск, а затем открыта оттуда.
На этой странице есть очень хорошее объяснение этих вещей.