Подтвердить что ты не робот

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

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

поле, о котором идет речь, его сопоставлено с utf8_general_ci

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

Любые идеи, пожалуйста?

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

AddDefaultCharset UTF-8

Ответ 3

Если вы используете 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">

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

Ответ 4

Пожалуйста, прочитайте 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.

Ответ 5

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