Як змінити кодування за замовчуванням на UTF-8 для Apache?


138

Я використовую хостинг-компанію, і вона перелічить файли в каталозі, якщо файлу index.htmlтам немає, він використовує iso-8859-1 як кодування за замовчуванням.

Якщо сервер Apache, чи існує спосіб встановити UTF-8 як стандартний?

Оновлення: Додатково я з’ясував, що він фактично використовує ДОКУМАТ HTML 3.2, а тоді взагалі немає шаблону ... тому це не встановлює кодування. Але чи є спосіб змінити його на використання UTF-8?

Відповіді:


176

У httpd.conf додати (або змінити, якщо вона вже є):

AddDefaultCharset utf-8

6
де у файл додається це, де завгодно?
системович

5
@ Джеффрі так. якщо його вже немає, ви можете помістити його куди завгодно. однак я зазвичай кладу кожну "власну" директиву в нижній частині файлу з ряду причин (переосмислюючи попередні директиви, порядок і просто, щоб легко побачити, що я змінив у конфігурації запасів).
MartinodF

6
Додати AddDefaultCharset utf-8 до .htaccess - спрацював для мене шарм. (якщо у вас немає доступу до httpd.conf)
richardwhitney

Чи враховано регістр?
Майк Стоддарт

6
Оскільки ця відповідь є з 2009 року: в Ubuntu 18 ви зміните цю конфігурацію на/etc/apache2/conf-available/charset.conf
WoodrowShigeru

55

Додайте це до свого .htaccess:

IndexOptions +Charset=UTF-8

Або якщо у вас є права адміністратора, ви можете встановити їх у всьому світі, відредагувавши httpd.confта додавши:

AddDefaultCharset UTF-8

(Ви можете використовувати AddDefaultCharsetв .htaccessтеж, але це не вплине на Apache згенерованих списків каталогів, до речі.)


4
Це чудове рішення і менш інвазивне, ніж зміна файлу httpd.conf.
Ендрю Свіфт

1
на моєму сервері, .htaccessможе вплинути і на всі підкаталоги, ймовірно, apache шукатиме будь-яку .htaccessбатьківську директорію аж до кореневого каталогу папки веб-сайту
nopopolarity

2
Так, це .htaccessпрацює на всіх серверах - це впливає і на всі підкаталоги. Однак, створені Apache сторінки переліків каталогів не можуть бути примушені до UTF-8 за допомогою .htaccess(AFAIK).
Mathias Bynens

9
Зверніть увагу, що зміна налаштувань на сервері за допомогою .htaccessфайлів - це взагалі погана практика. Помилки стає складніше відстежувати, коли налаштування сервера розподіляються між різними файлами. Невелике враження від продуктивності: з кожним запитуваним файлом Apache повинен прочитати .htaccessфайл каталогу та всі .htaccessфайли батьківських каталогів. .htaccessтому слід використовувати лише для конкретних параметрів каталогів (наприклад, запобігання доступу до певного каталогу) або тоді, коли абсолютно немає можливості отримати права адміністратора.
Роберт

2
Вгору проголосували, IndexOptions + Charset = UTF-8 зробив для мене трюк, дякую!
mTorres

28

Див Директива AddDefaultCharset , Директива AddCharset , і ця стаття .

AddDefaultCharset utf-8

Але мені доводиться використовувати китайські символи раз у раз. Раніше я перекладав китайські символи в код Unicode і включав його в документ за допомогою &#хак- коду . Але це корисно лише для сторінки, що має кілька символів.

Є кращий спосіб зробити це: кодувати інформацію про шаблони в імені файлу, і apache виведе відповідний заголовок кодування на основі цього. Це можливо завдяки AddCharsetрядкам у файлі конф, таких як рядок нижче:

conf/httpd.conf:

AddCharset UTF-8 .utf8

Отже, якщо у вас є файл, імена якого закінчуються .html.utf8, apache буде обслуговувати сторінку так, ніби вона закодована в UTF-8, і скидає відповідну директиву кодування символів у заголовок відповідно.


23

Помістіть AddDefaultCharset UTF-8у /etc/apache2/conf.d/charset. Насправді це вже є. Ви просто зобов'язані її прокоментувати, видаливши попереднє #.


2
Немає такого файлу як /etc/apache2/conf.d/charset. Це звичайний файл, що включає ваш дистрибутив. Як і будь-який інший файл, це не так httpd.conf.
Evi1M4chine

1
Його /etc/apache2/conf-enabled/charset.confна моєму розповсюдженні (Ubuntu 16.4). Також не працювало.
Алатор

23

У .htaccess додайте цей рядок:

AddCharset utf-8 .html .css .php .txt .js

Це для тих, хто не має доступу до конф-файлу свого сервера. Це просто ще одне, що потрібно спробувати, коли інші спроби провалилися.

Що стосується проблем продуктивності щодо використання .htaccess, я цього не бачив. Мій типовий час завантаження сторінки - 150-200 мС з .htaccess або без нього

Яка користь - ефективність, якщо ваша сторінка не відображається правильно. Більшість спільних серверів не дозволяють користувачеві отримувати доступ до конфігураційного файлу, який є кращим місцем для додавання набору символів.


Я не можу пояснити, але тільки це рішення працює на мене. Ось чому великий +1
Скалар Ваг

1
Як вже згадував @Robbert раніше - якщо ви вже не використовуєте .htaccessфайли, не починайте зараз. Є ефективність та адміністративні причини, чому це погана ідея (tm)
Signal15

Якщо ви не включаєте розширення, AddCharset застосовується до типу вмісту text / html та text / plain.
Нерозуміли

Це працювало для мене, поки всі вищезгадані тендери не робили. +1
Алатор

Прийнята відповідь стосується лише tex / html та text / plain: httpd.apache.org/docs/2.4/mod/core.html#adddefaultcharset
TacoV

10

Я не впевнений, чи маєте ви доступ до конфігурації Apache (httpd.conf), але ви повинні мати можливість встановити директиву AddDefaultCharset. Побачити:

http://httpd.apache.org/docs/2.0/mod/core.html

Знайдіть модуль mod_mime.c і переконайтесь, що встановлено наступне:

AddDefaultCharset utf-8 

або еквівалентні документи Apache 1.x ( http://httpd.apache.org/docs/1.3/mod/core.html#adddefaultcharset ).

Однак це працює лише тоді, коли "тип вмісту відповіді - це текст / звичайний або текст / html".

Ви також повинні переконатися, що на ваших сторінках також є набір шаблонів. Дивіться це для отримання додаткової інформації:

http://www.w3.org/TR/REC-html40/charset.html


8

Це не перевірено, але, ймовірно, спрацює.

У ваш .htaccess файл покладіть:

<Files ~ "\.html?$">  
     Header set Content-Type "text/html; charset=utf-8"
</Files>

Однак для цього знадобляться mod_headers на сервері.


Це працювало для мене, тоді як обране рішення не було. Дякую! Насправді мені навіть не довелося загортати це в <Files>теги.
Геремія

8

Для повноти, на Apache2 в Ubuntu, ви знайдете діаграму за замовчуванням у charset.conf у конфіденційній доступності.

Відміняйте рядок

AddDefaultCharset UTF-8

3

Якщо всі HTML-файли знаходяться в UTF-8 і не мають метатегів для типу вмісту, я зміг лише встановити необхідний за замовчуванням, щоб ці файли надсилалися Apache 2.4, додавши обидві директиви:

AddLanguage ru .html
AddCharset UTF-8 .html

3

Лише підказка, якщо у вас є довгі імена файлів у utf-8: за замовчуванням вони будуть скорочені до 20 байт, тому може статися, що останній символ може бути "розрізаний навпіл" і тому не розпізнаний належним чином. Тоді ви можете встановити наступне:

IndexOptions Charset=UTF-8 NameWidth=*

NameWidth налаштування запобіжить скороченню ваших імен файлів, зробить їх належним чином відображенням та читанням.

Як вже згадували інші користувачі, це слід додати або в, httpd.confабо apache2.conf(якщо у вас є права адміністратора), або в .htaccess(якщо у вас немає).


2

Просто залиште його порожнім: 'default_charset' in WHM :::::: default_charset =''

ps - У WHM перейдіть --------) Головна »Конфігурація послуги» Редактор конфігурації PHP ----) натисніть «Розширений режим» ----), знайдіть «default_charset» та залиште його порожнім ---- просто нічого, не utf8, не ISO


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.