Нужно ли объявлять тип содержимого / кодировку в HTML и PHP? - PullRequest
2 голосов
/ 11 октября 2010

Если тип содержимого и набор символов объявлены в заголовке PHP, есть ли причина, чтобы они снова были в обычном HTML DTD?

<?php ob_start( 'ob_gzhandler' );
 header('Content-type: text/html; charset=utf-8'); ?> // here
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> // and here
...

Ответы [ 3 ]

5 голосов
/ 11 октября 2010

Если вы отправляете кодировку в заголовках, нет необходимости повторять ее в разметке HTML.

Лучше отправлять эту информацию в одном месте (принцип DRY), как если бы кодировкиконфликт (т. е. заголовок с UTF-8 и мета с iso-8859-1), браузер, вероятно, перейдет в режим причуд.

Сказав это, некоторые автоматизированные инструменты (веб-скребки) могут не выглядетьв заголовке и выводите кодировку страницы только с помощью тега meta.

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

2 голосов
/ 11 октября 2010

Наличие кодировки в источнике HTML может быть полезно, если кто-то решит сохранить страницу или для веб-скребков :). libxml ищет метатег, чтобы определить набор символов, который будет использоваться при разборе разметки. Покажите своим коллегам-разработчикам какую-нибудь любовь к сети.

0 голосов
/ 11 октября 2010

Если вы объявите его в заголовках HTTP, то он выдержит транскодирование через прокси и никогда не вызовет ситуацию "Ой, я угадала неправильную кодировку, перезапустите анализ сверху" в браузерах.

Если вы объявите его в теле документа, то он останется доступным вне HTTP (или другой системы с заголовками типа контента, например, электронной почты).

Если вы объявите это в обоих, вы получителучшее из обоих миров, пока не происходит транскодирование.

Обратите внимание, что если вы не используете UTF-8 или UTF-16, то спецификация XML требует, чтобы вы указали ее в прологе XML (и что использование пролога XML вызовет режим Quirks в IE6).

...