почему я должен использовать mb_convert_encoding ($name, ‘ISO-8859-15’, ‘utf-8’) для отображения символов с ударением?

#php #mysql #encoding #utf-8 #mb-convert-encoding

#php #mysql #кодирование #utf-8 #mb-convert-encoding

Вопрос:

данные, с которыми я работаю здесь, взяты со страницы, использующей кодировку utf8

я настроил свою базу данных и поля на использование utf8_general_ci

теперь по какой-то причине я должен использовать следующий код для переменной, чтобы она правильно отображала символы с ударением в базе данных:

 mb_convert_encoding($name,'ISO-8859-15','utf-8');
  

для меня это не имеет смысла. почему я должен конвертировать его в ISO-8859-15, когда phpmyadmin находится в utf8, данные — в utf8, а поля базы данных и таблицы — в utf8?

Ответ №1:

Скорее всего, вы не установили для своего соединения с базой данных значение UTF-8, поэтому ваша база данных ожидает, что вы отправите данные в кодировке ISO-8859. Смотрите http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html

Комментарии:

1. набор символов клиент utf8 (глобальное значение) latin1 набор символов подключение utf8 (глобальное значение) latin1 набор символов база данных latin1 набор символов файловая система двоичный набор символов результаты utf8 (глобальное значение) latin1 набор символов сервер latin1 система набора символов utf8

2. похоже, что для некоторых переменных установлено значение latin1, я предполагаю, что это то, что вы имеете в виду? однако я не могу найти в INI, где это изменить…

3. Для каждого нового соединения, после подключения, выполняйте запрос SET NAMES utf8 или используйте mysql_set_charset . Поскольку нередки случаи, когда вы не можете изменить настройки ini в рабочей среде, это наиболее переносимый метод.

4. mysql_query(«набор имен utf8»); сработал отлично. я полагал, что для выполнения этого потребуется один раз, не понимал, что вы должны делать это при каждом новом подключении. Спасибо.