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

UTF-8 кодированные html-страницы отображают (вопросительные знаки) вместо символов

У меня есть стандартная установка XAMPP на win7 (x64). Имея мою долю проблем с кодированием в прошлом проекте, где кодировка mysql не соответствовала запросу php, который в свою очередь иногда выводил html в других кодировках, я решил последовательно кодировать все, используя utf-8.

Я только начинаю с разметки html и все уже испытываю проблемы.

  • Моя страница сохраняется с помощью utf-8 (без спецификации, я думаю)
    //update: Оказывается, это не так. Файл был фактически сохранен с помощью ISO_8859-1. Позже я узнал об этом благодаря ответу Шерма Пендлиса. Мне пришлось вернуться и изменить настройки проекта (которые были установлены на "ISO-8859-1" ) на желаемый "UTF-8".
  • php установлен на .htaccess для обслуживания .php-страниц в utf-8 с помощью: AddCharset UTF-8 .php
  • html имеет метатег, указывающий: <meta http-equiv="Content-Type" content="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
4b9b3361

Ответ 1

Когда [удаление] настроек кодировки упомянутые выше все символы [отображаются] правильно, но обнаруженная кодировка показывает либо windows-1252, либо ISO-8859-1 в зависимости от браузера.

Тогда это то, что вы действительно отправляете. Ни один из параметров кодирования в вашем списке маркеров фактически не изменит ваш вывод каким-либо образом; все, что они делают, сообщает браузеру, какую кодировку следует принимать при интерпретации отправляемого вами. Вот почему вы получаете эти s - вы сообщаете браузеру, что то, что вы отправляете, это UTF-8, но это действительно ISO-8859-1.

Ответ 2

В моем случае база данных вернула latin1, когда мой браузер ожидал utf8.

Итак, для MySQLi я сделал:

 mysqli_set_charset($dblink, "utf8");    

Подробнее о http://php.net/manual/en/mysqli.set-charset.php

Ответ 3

Проверьте, что какой-либо из ваших файлов .php, которые печатают некоторый текст, также правильно кодируется в utf-8.

Ответ 4

Сначала сообщите PDO о своем charset.... что-то вроде

PDO("mysql:host=$host;dbname=$DB_name;charset=utf8;", $username, $password);

Обратите внимание на часть charset=utf8;.

надеюсь, что это поможет!

Ответ 5

Похоже, никто не упомянул

SET NAMES utf8;

Я нашел это решение здесь, и это помогло мне. Как его применить:

Чтобы быть всем UTF-8, выполните следующую инструкцию сразу после того, как вы установили соединение с сервером базы данных: SET NAMES utf8;

Возможно, это поможет кому-то.

Ответ 6

Я из Бразилии и создаю свои базы данных с помощью latin1_spanish_ci. Для html и всего остального я использую:

charset=ISO-8859-1

Данные идут правильно с помощью é, ã и ç... Иногда мне нужно поместить тексты html с помощью его кода, например:

Ol&aacute;

дает мне

Olá

Коды можно найти на этой странице: http://www.ascii.cl/htmlcodes.htm

Надеюсь, это поможет. Я помню, это было ДЕЙСТВИТЕЛЬНО раздражает.

Ответ 7

Проблема заключается в кодировке, которая используется 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

Надеюсь, это поможет.