Показывает � вместо £ - PullRequest
       1

Показывает � вместо £

12 голосов
/ 22 февраля 2011

символ showing показывает вместо £ при извлечении данных из базы данных mysql

рассматриваемое поле сопоставлено с utf8_general_ci

У меня также есть <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> на заголовке тегастраница

Есть идеи, пожалуйста?

Ответы [ 5 ]

30 голосов
/ 22 февраля 2011

Используйте mysql_query("SET NAMES 'UTF8'"); перед выполнением любых запросов к базе данных.

6 голосов
/ 23 марта 2011

Как говорили другие, вы должны SET NAMES 'UTF8' определить, что это не кодировка по умолчанию.Также возможно, что в базу данных были вставлены неправильные символы.

Проверьте источник, если он действительно в формате UTF-8 и был импортирован как UTF-8.(Вы можете повторно импортировать данные после установки NAMES с помощью запроса выше).

Если они были введены через форму HTML, проверьте, содержит ли страница HTML, содержащая вашу форму ввода данных, правильный meta элемент..

Также проверьте заголовки, которые ваш HTTP-сервер отправляет вам (вы можете сделать это с расширением Firebug).Вы можете установить кодировку по умолчанию для вашего сервера в файле .htaccess , содержащем:

AddDefaultCharset UTF-8
5 голосов
/ 24 марта 2011

Если вы используете PHP, рекомендуемый способ установить кодировку: mysql_set_charset ().

Моя первоначальная настройка для MySQL:

<?php
$db = mysql_connect( ... );
mysql_set_charset( 'utf8', $db );

header('Content-Type: text/html; charset=UTF-8');
?>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

Таким образом, у меня никогда не было проблем с кодировкой.

3 голосов
/ 23 марта 2011

Пожалуйста, прочитайте http://mysqldump.azundris.com/archives/60-Handling-character-sets.html

Краткая версия: В строковых полях MySQL есть присоединенный набор символов, а также соединения.Набор символов соединения представляет собой представление набора символов клиента на стороне сервера, это то, что сервер думает, что клиент использует.

Краткий способ установить набор символов соединения - это SET NAMES utf8, как упомянуто вкомментарий выше.

Если набор символов поля отличается от набора символов подключения, MySQL попытается преобразовать поле в набор символов подключения.Он не будет пытаться сделать это, если оба равны.

Способ отладки, как показано в статье, - посмотреть на поле с помощью функции HEX (), проверяя, что на самом деле на диске.данные есть, и если они верны.

Затем вы подключаетесь к базе данных, установив для вашего соединения правильный клиентский набор символов с помощью SET NAMES utf8, если вы на самом деле работаете с utf8, как вы утверждаете.Затем снова выведите HEX () строки, она должна быть такой же.Если это не так, соединение не имеет правильного набора символов, например, если вы забыли установить SET NAMES utf8.

Вы можете настроить набор символов подключения по умолчанию в MySQL, используя определение SET NAMES изруководство, http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html

SET character_set_client = utf8;
SET character_set_results = utf8;
SET character_set_connection = utf8;

Если вы поместите это в раздел mysqld вашего my.cnf и перезапустите сервер, SET NAMES больше не понадобятся, так как теперь соединение по умолчанию будет иметьutf8.

2 голосов
/ 23 марта 2011

это также происходит, если вы получаете текст с помощью jquery и ajax, попробуйте повторить строку с utf8_encode ($ string)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...