PHP: текущая кодировка, используемая для отправки данных в браузер - PullRequest
1 голос
/ 25 сентября 2008

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

Ответы [ 6 ]

1 голос
/ 06 января 2012

Обычно серверы Apache + PHP веб-хостеров настроены на отправку NO charset header . Кратчайший способ проверить, как настроен ваш сервер:

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

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

1 голос
/ 25 сентября 2008

Имейте в виду, что типы контента и кодировки - это две разные вещи. 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");
1 голос
/ 25 сентября 2008

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

0 голосов
/ 30 августа 2010

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

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

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

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

0 голосов
/ 25 сентября 2008

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

0 голосов
/ 25 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...