Кодировка UTF-8 в html странице
Есть index.html , который, при запуске локально (chrome, IE), отображается корректно. При загрузке на виртуальный сервер, и открытии через Chrome — абракадабра. Через IE — все ок (вероятно, IE подстраивается под необходимую кодировку, хотя в кодировке так же — UTF-8 ). В head есть строка:
Но wget возвращает: charset=CP1251 . Почему? Возможно, нужно поменять что-то на сервере? Сервер linux, uhttpd
Отслеживать
2,969 3 3 золотых знака 15 15 серебряных знаков 30 30 бронзовых знаков
задан 3 ноя 2015 в 11:13
Vyacheslav Groshenkov Vyacheslav Groshenkov
157 2 2 серебряных знака 10 10 бронзовых знаков
да, вероятно, надо заменить заголовок content-type на актуальный. посмотрите, что возвращает, например, этот сайт: $ wget -S —spider http://stackoverflow.com |& grep -i content-type
3 ноя 2015 в 11:19
Вернуло: Content-Type: text/html; charset=utf-8 Соответственно, у меня и стоит utf-8. Поэтому, никак не могу понять, в чем проблема. Попробовал поменять на: — не помогло. (в таком режиме корректно работают php страницы на сервере).
3 ноя 2015 в 11:23
Я сделал команду выше на свой сайт, вернуло: text/html; charset=CP1251 . Хотя в index.html стоит UTF-8. Видимо в этом и ошибка. Почему так может быть?
3 ноя 2015 в 11:26
Почему так может быть? — вероятно, так настроен ваш http-сервер. кстати, это может быть совсем и не uhttpd, а, например, какой-нибудь прокси-сервер. посмотрите другие возвращаемые заголовки (убрав из предложенной команды всё, начиная с | ).
3 ноя 2015 в 11:29
@banme заголовок и BOM приоритетнее: This element is only a part of the algorithm to determine the character set of a page that browsers apply. The HTTP Content-Type header and any BOM elements have precedence over this element. — developer.mozilla.org/en/docs/Web/HTML/Element/meta
– user177221
12 ноя 2015 в 9:28
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Проверьте в какой кодировке сам документ index.html Откройте его к примеру в Notepad++ вкладка КОДИРОВКА и выберете UTF8 без BOM . После перезалейте на сервер.
Отслеживать
473 2 2 золотых знака 8 8 серебряных знаков 28 28 бронзовых знаков
ответ дан 12 ноя 2015 в 9:03
21 2 2 бронзовых знака
Проблема в кодировке, отдаваемой сервером в заголовках (Content-type). Ее можно изменить в конфигурационном файле сервера (для apache httpd.conf), или в случаях, если он не доступен на хостинге или поддерживает сайты в разных кодировках, то надо использовать файл .htaccess в корневой папке Вашего сайта (там, где index.html и т.п.) Если файла .htaccess нет, то просто создайте его. В нем надо указать строку:
AddDefaultCharset UTF-8
Отслеживать
ответ дан 12 ноя 2015 в 9:30
44.1k 3 3 золотых знака 35 35 серебряных знаков 66 66 бронзовых знаков
- linux
- кодировка
- сервер
- google-chrome
- utf-8
-
Важное на Мете
Связанные
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Настройка параметра HTTP charset
Когда сервер отправляет документ клиентскому приложению (например, браузер), он также отправляет информацию в поле Content-Type сообщая заголовок HTTP о том, какой это тип данных. Эта информация выражается с помощью отметки MIME. Эта статья должна стать отправной точкой для тех, кто должен установить информацию о кодировке в заголовке HTTP.
Параметр charset
Документы, переданные с HTTP, которые имеют следующие типы текста: text/html, text/plain, и т.д., могут послать charset параметр к заголовку HTTP, чтобы указать кодировку символов документа.
Это очень важно всегда явно отмечать Веб документы. В HTTP 1.1 говорится, что по умолчанию charset должен быть ISO-8859-1. Но есть очень много неотмеченных документов в других кодировках, поэтому когда нет явного параметра charset браузеры используют то кодирование, которое предпочитает читатель.
Обычно строка в заголовке HTTP выглядит следующим образом:
Content-Type: text/html; charset=utf-8
Установка сервера
Как сделать так, чтобы сервер посылал соответствующую charset информацию зависит от сервера. Чтобы иметь возможность изменять настройки сервера вам понадобятся соответствующие административные права.
Apache. Это можно сделать с помощью AddCharset (Apache 1.3.10 и позднейшие) или директив AddType для каталогов или отдельных ресурсов (файлов). С помощью AddDefaultCharset (Apache 1.3.12 и позднейшие), можно установить параметр charset по умолчанию для всего сервера. Дополнительные сведения смотрите в статье Настройка ‘charset’ информации в .htaccess.
Jigsaw. Используйте indexer в JigAdmin , чтобы связать расширения с charset, или установить charset непосредственно на ресурсе .
IIS 5 и 6. В Internet Services Manager, щелкните правой кнопкой мыши «Default Web Site» (или сайт, который нужно настроить) и перейдите к «Properties» => «HTTP Headers» => «File Types. » => «New Type. «. Поставьте расширение, которое вы хотите отобразить, отдельно для каждого расширения; вероятно пользователи IIS захотят, отобразить .htm, .html. Тогда добавьте к Content type » text/html;charset=utf-8 » (без кавычек; замените желаемый вами charset на iso-8859-1; нигде не оставляйте пробелы, поскольку IIS игнорирует весь текст после пробелов). Для IIS 4, вам возможно, придется использовать «HTTP Headers» => «Creating a Custom HTTP Header» если выше указанная схема не работает.
Скриптовий заголовок
Соответствующий заголовок можно также установить в server side scripting languages (скриптовые языки сервера). Например:
Perl. Выведите правильный заголовок перед любой частью текущей страницы. После последнего заголовка, используйте двойной linebreak (разрыв строки), например:
print «Content-Type: text/html; charset=utf-8\n\n»;
Python. Используйте то же решение, что и для Perl (кроме того, что в конце вам не нужно использовать точку с запятой).
PHP. Перед созданием любого контента используйте функцию header(), например:
header(‘Content-type: text/html; charset=utf-8’);
Java Servlets. Используйте setContentType метод на ServletResponse до получения любого объекта (Stream или Writer) использованного для вывода, например:
resource.setContentType («text/html;charset=utf-8»);
Если вы используете Writer, Servlet автоматически заботится о преобразовании с Java Строк в избранное кодирование.
JSP. Используйте директиву page например:
Выводит из out.println() или выраженные элементы ( ) автоматически превращаются в избранное кодирование. Кроме того, сама страница интерпретируется, как закодированная в этой кодировке.
ASP и ASP.Net. ContentType и charset устанавливаются независимо, и есть методы для соответствующего объекта. Чтобы установить charset, используйте например:
В ASP.Net, настройки Response.ContentEncoding будет влиять на параметр charset в HTTP Content-Type так же как отправленное фактическое кодирование документа (которое, конечно, должно быть таким же). По умолчанию может быть установлено в элементе globalization в Web.config (или Machine.config , которое первоначально установленно в UTF-8).
Дополнительные материалы
- Настройка charset информации в .htaccess
- Проверка заголовков HTTP
- Пособие, Обработка кодирования символов в HTML и CSS
- Ссылки по теме, Настройка сервера
- Символы
- Настройка параметра HTTP charset
- Символы
- Символы
mb_internal_encoding
encoding — это имя кодировки, в которую будут преобразовываться входные данные HTTP-запроса, из которой будет конвертироваться HTTP-вывод, а также это кодировка по умолчанию для всех функций, работающих со строками, определёнными в модуле mbstring. Обратите внимание, что внутренняя кодировка полностью отличается от кодировки для многобайтовых регулярных выражений.
Возвращаемые значения
Если аргумент encoding задан, то Возвращает true в случае успешного выполнения или false в случае возникновения ошибки. В этом случае не меняется кодировка символов для многобайтных регулярных выражений. Если аргумент encoding опущен, будет возвращено имя текущей внутренней кодировки.
Ошибки
Начиная с PHP 8.0.0, выбрасывается исключение ValueError , если значение параметра encoding является недопустимой кодировкой. До PHP 8.0.0 вместо этого выдавалась ошибка уровня E_WARNING .
Список изменений
Версия Описание 8.0.0 Теперь параметр encoding может принимать значение null . 8.0.0 Теперь выбрасывается исключение ValueError , если значение параметра encoding является недопустимой кодировкой. Ранее вместо этого выдавалась ошибка уровня E_WARNING . Примеры
Пример #1 Пример использования mb_internal_encoding()
/* Установка внутренней кодировки в UTF-8 */
mb_internal_encoding ( «UTF-8» );?php
/* Вывод на экран текущей внутренней кодировки */
echo mb_internal_encoding ();
?>Смотрите также
- mb_http_input() — Определение кодировки символов входных данных HTTP-запроса
- mb_http_output() — Установка/получение кодировки символов вывода HTTP
- mb_detect_order() — Установка/получение списка кодировок для механизмов определения кодировки
- mb_regex_encoding() — Устанавливает/получает текущую кодировку для многобайтового регулярного выражения
User Contributed Notes 7 notes
17 years ago
Especially when writing PHP scripts for use on different servers, it is a very good idea to explicitly set the internal encoding somewhere on top of every document served, e.g.
This, in combination with mysql-statement «SET NAMES ‘utf8′», will save a lot of debugging trouble.
Also, use the multi-byte string functions instead of the ones you may be used to, e.g. mb_strlen() instead of strlen(), etc.
8 years ago
header ( ‘Content-Type: text/html; charset=UTF-8’ );
mb_internal_encoding ( ‘UTF-8’ );
mb_http_output ( ‘UTF-8’ );
mb_http_input ( ‘UTF-8’ );
mb_regex_encoding ( ‘UTF-8’ );18 years ago
Be aware that the strings in your source files must match the encoding you specify by mb_internal_encoding. It appears the Parser loads raw bytes from the file and refers to its internal encoding to determine their actual encoding.
To demonstrate, the following outputs as espected when the /source/ file is Latin-1 encoded:
mb_internal_encoding ( «iso-8859-1» );
mb_http_output ( «UTF-8» );
ob_start ( «mb_output_handler» );Now, a typical use of mb_internal_encoding is shown as follows. Make the change to «utf-8» but leave the /source/ file encoding unchanged:
mb_internal_encoding ( «UTF-8» );
mb_http_output ( «UTF-8» );
ob_start ( «mb_output_handler» );The output will just show the
tag and no text.Save the file as UTF-8 encoding and then the results will be as expected.
/utf-8 (Задайте для исходных и выполняемых наборов символов значение UTF-8)
Этот параметр можно использовать /utf-8 для указания исходных и символьных наборов выполнения в кодировке с помощью UTF-8. Это эквивалентно /source-charset:utf-8 /execution-charset:utf-8 указанию в командной строке. Любой из этих параметров также включает /validate-charset параметр по умолчанию. Список поддерживаемых идентификаторов кодовой страницы и имен наборов символов см. в разделе «Идентификаторы кодовой страницы».
По умолчанию Visual Studio обнаруживает метку порядка байтов, чтобы определить, находится ли исходный файл в формате Юникода, например UTF-16 или UTF-8. Если метка порядка байтов не найдена, предполагается, что исходный файл закодирован на текущей пользовательской кодовой странице, если только вы не указали кодовую страницу или /utf-8 /source-charset параметр. Visual Studio позволяет сохранять исходный код C++ в любом из нескольких кодировк символов. Сведения о наборах символов источника и выполнения см . в документации по языку.
Установка параметра в Visual Studio или программным способом
Установка данного параметра компилятора в среде разработки Visual Studio
- Откройте диалоговое окно Окна свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойств сборки в Visual Studio.
- Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
- В разделе «Дополнительные параметры» добавьте параметр, чтобы указать /utf-8 предпочитаемую кодировку.
- Нажмите ОК, чтобы сохранить внесенные изменения.
Установка данного параметра компилятора программным способом
- См. раздел AdditionalOptions.