PHP:Текущая кодировка, используемая для отправки данных в браузер

StackOverflow https://stackoverflow.com/questions/130511

  •  02-07-2019
  •  | 
  •  

Вопрос

Как я могу узнать, какая кодировка будет использоваться PHP при отправке данных в браузер?То есть.например, с заголовком типа Cotent:iso-8859-1.

Это было полезно?

Решение

Обычно серверы веб-хостингов Apache + PHP настроены на отправку НЕТ charset заголовок.Это самый короткий способ проверить, как настроен ваш сервер:

  • Использование этот инструмент позволяет увидеть заголовок сервера разместив любую из ваших страниц на вашем веб-сайте.Если в заголовках сервера вы видите charset это означает, что ваш сервер использует его, обычно он не будет содержать charset.
  • Другой способ - запустить этот простой скрипт на вашем сервере: <?php echo ini_get('default_charset'); ?> Как было сказано выше, это обычно выводит пустую строку, если она отличается, она покажет вам charset из PHP.

2-е решение предполагает, что Apache не настроен с AddDefaultCharset some_charset обычно это не так, но в таком случае, я боюсь, что настройки Apache могут переопределить директиву PHP deafult_charset ini.

Другие советы

Вы можете использовать решение header(), предложенное Уильямом, однако, если вы используете Apache, а конфигурация Apache использует кодировку по умолчанию, которая будет выигрывать каждый раз (Internet Explorer сойдет с ума) См.: AddDefaultCharset Добавить значение по умолчанию

Имейте в виду, что типы контента и кодировки - это две разные вещи.text/html - это тип содержимого;ISO-8859-1 и UTF-8 являются кодировками.

Заголовок HTTP-ответа, который отправляет сервер, обычно выглядит следующим образом:

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

"charset" - это на самом деле кодировка символов.Это не в отдельном заголовке;однако существует заголовок под названием "Content-Encoding", который фактически указывает, какой тип сжатия использует ответ (напримерgzip).

Если вы хотите изменить кодировку символов на UTF-8 в файле, содержащем HTML:

<?
header("Content-Type: text/html; charset=utf-8");

Вы можете установить свой собственный с помощью header('Content-type: xxx/yyy');, но я считаю, что текст / html отправляется по умолчанию.

AFAIK, PHP отправляет строки по очереди.то есть, если ваши переменные содержат UTF-8, он отправит UTF-8.если у вас есть iso-8859-1, он отправит и это тоже.если вы их смешаете, получится некрасиво.

Если ваш сервер не настроен на использование содержимого по умолчанию или кодировки, а также PHP, PHP отправит только Content-Type: text/html - он вообще не будет указывать кодировку и будет отправлять байты такими, какими он их видит в скрипте.

Если браузер получает страницу без указанной кодировки, могут произойти различные вещи:

  • в большинстве браузеров есть меню "Кодировка / кодировка";если пользователь явно выберет один из них, браузер попытается применить его.Это случается не слишком часто, так что:
  • некоторые браузеры пытаются отобразить его с кодировкой по умолчанию (которая зависит от локали, напримердля FF и cs_CZ раньше это было iso-8859-2;YMMV)
  • IE попытается определить кодировку эвристически (потребуется предположение, основанное на распределении символов - и много раз оно будет правильным;иногда он ошибается, и вы получаете страницу на румынском языке, интерпретируемую как китайский текст, что обычно означает "нечитаемый")
  • некоторые старые браузеры вернутся к us-ascii

Если с помощью этой процедуры кодировка PHP-скрипта и браузера совпадет, текст - случайно - станет читабельным.Если нет, то будут наблюдаться странные знаки и подобные явления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top