У меня есть стандартная установка XAMPP на win7 (x64). Имея мою долю проблем с кодировкой в прошлом проекте, где кодировка mysql не совпала с php, который в свою очередь иногда выводил html в других кодировках, я решил последовательно кодировать все, используя utf-8.
Я только начинаю с html-разметки и уже испытываю проблемы.
ISO_8859-1
. Позже я узнал об этом благодаря ответу Шерма Пендлиса. Мне пришлось вернуться и изменить настройки проекта (которые были установлены на «ISO-8859-1») на желаемый «UTF-8». AddCharset UTF-8 .php
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header('Content-Type:text/html; charset=UTF-8');
php header('Content-Type:text/html; charset=UTF-8');
Очевидно, что страница используется в utf-8 (firefox и chrome распознают ее как таковой), но любые специальные символы, такие как é
, á
или ¡
будут отображаться только как
. Также при просмотре исходного кода.
При отбрасывании упомянутых выше параметров кодирования все символы отображаются правильно, но обнаруженная кодировка показывает в зависимости от браузера windows-1252
или ISO-8859-1
.
Как так? Я очень озадачен. Я бы ожидал совершенно противоположного поведения.
Любые советы приветствуются, спасибо!
Надеюсь, это поможет немного больше. Это заголовок ответа (в соответствии с firebug)
HTTP/1.1 200 OK Date: Sat, 26 Mar 2011 20:49:44 GMT Server: Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1 mod_apreq2-20090110/2.7.1 mod_perl/2.0.4 Perl/v5.10.1 X-Powered-By: PHP/5.3.1 Content-Length: 91 Keep-Alive: timeout=5, max=99 Connection: Keep-Alive Content-Type: text/html; charset=utf-8
Когда [сброс] настройки кодирования, упомянутые выше, все символы [отображаются] корректно, но обнаруженная кодировка показывает либо окно-1252, либо ISO-8859-1 в зависимости от браузера.
Тогда это то, что вы действительно отправляете. Ни один из параметров кодирования в вашем списке маркеров фактически не изменит ваш вывод каким-либо образом; все, что они делают, сообщает браузеру, какую кодировку следует принимать при интерпретации отправляемого вами. Вот почему вы получаете эти s – вы сообщаете браузеру, что то, что вы отправляете, это UTF-8, но это действительно ISO-8859-1.
В моем случае база данных вернула latin1
, когда мой браузер ожидал utf8
.
Итак, для MySQLi я сделал:
mysqli_set_charset($dblink, "utf8");
См. http://php.net/manual/en/mysqli.set-charset.php для получения дополнительной информации
Проверьте, что какой-либо из ваших файлов .php
которые печатают некоторый текст, также правильно кодируется в utf-8
.
Сначала charset
PDO о своей charset
…. что-то вроде
PDO("mysql:host=$host;dbname=$DB_name;charset=utf8;", $username, $password);
Обратите внимание: charset=utf8;
часть.
Надеюсь, поможет!
Похоже, никто не упоминал
SET NAMES utf8;
Я нашел это решение здесь, и это помогло мне. Как применить его:
Чтобы быть всем UTF-8, выполните следующую инструкцию сразу после того, как вы установили соединение с сервером базы данных: SET NAMES utf8;
Может быть, это поможет кому-то.
Я из Бразилии, и я создаю свои базы данных, используя latin1_spanish_ci
. Для html и всего остального я использую:
charset=ISO-8859-1
Данные идут правильно с помощью é
, ã
и ç
… Иногда мне приходится помещать тексты html с помощью его кода, например:
Olá
дает мне
Olá
Коды можно найти на этой странице: http://www.ascii.cl/htmlcodes.htm
Надеюсь это поможет. Я помню, это было ДЕЙСТВИТЕЛЬНО раздражающим.
Проблема заключается в кодировке, которая используется apache для обслуживания страниц. Я работаю с Linux, поэтому ничего не знаю о XAMPP. У меня была такая же проблема, что я и сделал, чтобы решить проблему, – добавить charset в конфигурационный файл charset
(по умолчанию комментируется).
В моем случае у меня это в /etc/apache2/conf.d/charset
но, поскольку вы используете Windows, расположение отличается. Поэтому я даю вам это как идею о том, как его решить.
В конце мой конфигурационный файл charset выглядит так:
# Read the documentation before enabling AddDefaultCharset. # In general, it is only a good idea if you know that all your files # have this encoding. It will override any encoding given in the files # in meta http-equiv or xml encoding tags. AddDefaultCharset UTF-8
Я надеюсь, что это помогает.