#php #html #utf-8 #internationalization
#php #HTML #utf-8 #интернационализация
Вопрос:
В phpmyadmin я сохранил несколько русских значений, используя кодировку utf8_unicode_ci. Они отлично отображаются в phpmyadmin.
Проблема возникает, когда я получаю эти значения с помощью php и пытаюсь поместить их в параметры выбора, они отображаются как «??????».
Я пытался изменить кодировку в заголовках на iso-8859-1 вместо utf-8, но это тоже не работает.
Я также пробовал с
mb_convert_encoding($str, 'UTF-8', 'auto');
но никаких изменений 🙁
Есть еще идеи??
Ответ №1:
Если вы используете MySQL DB / connection, используйте mysql_query("SET NAMES 'utf8'");
перед запуском запроса, хотя лучшей альтернативой является mysql_set_charset() .
Также убедитесь, что у вас есть запись:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
В разделе заголовка вашей страницы.
Если вы используете PDO, измените ваше подключение на:
$PDO_connection = new PDO("mysql:host=".$db['host'].";dbname=".$db['name'],
$db['user'], $db['pword'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")
Комментарии:
1. uk3.php.net/manual/en/function.mysql-set-charset.php — «Использование mysql_query() для выполнения ЗАДАННЫХ ИМЕН .. не рекомендуется». — вы должны использовать
mysql_set_charset()
— это не ответ на вопрос «Почему -1», поскольку я не -1 вас, просто предложение изменитьmysql_query()
часть вашего ответа 😉2. На этот счет есть примечание, хотя, по общему признанию, это могло бы быть понятнее 1
Ответ №2:
Я попытался изменить кодировку в заголовках на iso-8859-1 вместо utf-8
Для чего? какой смысл менять правильную кодировку, поддерживающую русские символы, на неправильную, которая этого не делает?
Чтобы добиться правильного кодирования на вашей странице, вам нужно сделать 2 вещи:
- Чтобы сообщить базе данных, в какой кодировке вы ожидаете получить свои данные. Это должно быть сделано с
mysql_set_charset('utf8')
помощью (или аналогичной функции другой библиотеки, если вы ее используете), гдеutf8
это название кодировки на языке mysql. - чтобы сообщить браузеру, в какой кодировке ваша страница. это должно быть сделано с
Content-type
помощью HTTP заголовка, используяheader ('Content-type: text/html; charset=utf-8');
и ничего больше.
Комментарии:
1. Прежде чем кто-либо задаст вопрос, да, это «utf8» при установке его в подключении к базе данных и «utf-8» в заголовке HTTP: P