После перехода на новый стек программного обеспечения на китайских страницах требуется установка кодировки в браузере

Мы перешли на новый сервер с полностью обновленным стеком программного обеспечения, включая apache 2.4 и php 5.6.9. У нас есть страница на упрощенном китайском языке. На нашем старом сервере (apache 2.2, php 5.3.5) страницы отображаются правильно. Сайт находится в UTF-8 в большинстве случаев, за исключением того, что на рассматриваемой странице есть следующие теги:

<html lang="zh-cn">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb18030" />

На новом сайте страница не будет отображаться должным образом, если для этой страницы не будет изменена кодировка браузера. Для Chrome, Firefox и IE изменение настроек аналогично: View> Кодирование> gb18030 (на Firefox, китайский, упрощенный).

Что заставляет новую установку требовать этого переопределения в браузере, чего раньше никогда не требовалось?

2 голоса | спросил Jeffrey Simon 27 J000000Monday15 2015, 23:02:40

1 ответ


1

Мы много пробовали, но, наконец, получили что-то для работы. Мы должны отправить заголовок перед отправкой любого другого результата. Таким образом, причина, предложенная Саймоном Хейтером, верна, и наше решение реализует исправление.

Вот как выглядят первые две строки или наш код:

<?php
header('Content-Type:text/html;charset=gb18030');

Мы полагаем, что основная причина в том, что действие по умолчанию для apache изменилось между версиями 2.2 и 2.4, которое было частью обновления нашего стека. По-видимому, версия 2.4 устанавливает кодировку по умолчанию для UTF-8 в заголовке, и ничто, что мы пытались (из многих параметров конфигурации Apache), не могло это изменить. Независимо от того, что мы пробовали, 2.4 отправил следующий заголовок:

Content-Type: text/html; charset=UTF-8

С другой стороны, наш apache 2.2 отправил следующий заголовок:

Content-Type: text/html

Других существенных различий в выходе сервера (который был получен через curl) не было.

Как я уже сказал, мы не могли заставить apache 2.4 не отправлять charset = UTF-8, даже с помощью AddDefaultCharset и т. д.

Итак, обходной путь заключается в том, чтобы php отправил заголовок, как показано выше.

Я прикрепляю изображение части diff, показывая, о чем говорю. Разница, обозначенная «17», показывает разницу.

 diff, показывающий разные заголовки apache

ответил Jeffrey Simon 29 J000000Wednesday15 2015, 01:46:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132