Интернационализация лучших практик для использования utf8_encode() (функция php)

Чтобы веб-сайт мог принимать пользовательское содержимое, которое может быть не на английском языке (например, на японском языке), и сохранять его в базе данных, в моих ли интересах интересовать utf8_encode всем новым контентом и пользователем utf8_decode при его получении позже?

Дополнительная информация: я использую доктрину и получаю сообщение об ошибке при попытке сохранить или выбрать символы Unicode в базе данных MySQL:

SQLSTATE [HY000]: общая ошибка: 1267 Недопустимое сочетание параметров сортировки (latin1_swedish_ci,IMPLICIT) и (utf8_general_ci,COERCIBLE) для операции '='

2 ответа

Решение

Вам не нужно использовать функцию кодирования. Что вам нужно сделать, это убедиться, что вы UTF8 от начала до конца. Похоже, что ваша база данных может использовать латинскую кодировку и сопоставление. Ваше соединение с базой данных также должно быть UTF8. Иногда это просто вопрос выполнения запроса SET NAMES UTF8 сразу после установления соединения.

Выполнение этой команды в mysql, скорее всего, устранит ошибку, которую вы видели выше, но вам все равно нужно быть сквозным UTF8. Тогда вам не нужно делать ничего особенного с вашими данными.

ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Брент прав. Это должно быть сквозным. Вот мой список:

Apache config:
    AddDefaultCharset UTF-8
    AddCharset UTF-8  .utf8

php.ini:
    default_charset = "utf-8"

MySQL:
    ALTER DATABASE DEFAULT CHARACTER SET utf8;
    ALTER TABLE SomeTableName DEFAULT CHARACTER SET utf8;

PHP/HTML:
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    …
    <form … <input type="text" name="some_field" value="<?php echo htmlspecialchars($row['some_field'], ENT_COMPAT, 'UTF-8'); ?>"…

This last one seems the most important. Call this function immediately after the mysql_connect() call:
    mysql_query("SET NAMES 'utf8'");
Другие вопросы по тегам