Каков наилучший способ определить / преобразовать кодировку внешнего файла HTML? - PullRequest
1 голос
/ 18 января 2011

Я анализирую HTML из ~ 100 разных доменов. Я мог бы проверить, какую кодировку использует каждый домен, и делать то же самое, но это кажется глупым.

Обычно кодировка в тегах заголовка, да? но не всегда я собираюсь. так что мне может понадобиться запустить некоторое регулярное выражение? или используйте некоторые функции mb_. Или возможно использовать cURL? Все примеры, которые я нашел до сих пор, относятся к XML, и теперь у меня болит голова.

Да, также я использую класс DOMDocument, чтобы найти то, что я хочу. И все это прекрасно работает. За исключением кодировки.

Ответы [ 2 ]

0 голосов
/ 18 января 2011

В соответствии со стандартами W3C , вы должны следовать следующим приоритетам, чтобы получить кодировку документа HTML / XML:

  • Content-Type header (изHTTP-ответ)
  • объявление XML или XHTML, например: <?xml version="1.0" encoding="utf-8" ?>
  • meta тег с http-equiv="Content-Type" (из заголовка HTML)

В моемопыт, когда все это терпит неудачу, вы можете предположить, что кодировка, скорее всего, ISO-8859-1 или CP1252.Вы можете декодировать контент с помощью библиотеки iconv, например: iconv("UTF-8", "ISO-8859-1", $content).

Если вы используете библиотеку cURL для получения URL-адресов, вы можете получить заголовок типа контента с помощью: curl_getinfo($ch, CURLINFO_CONTENT_TYPE).Другие теги можно извлечь с помощью синтаксического анализатора XML / HTML.

0 голосов
/ 18 января 2011

Вы можете проанализировать метатег, который любой ответственный программист должен был включить в элемент <head>.

<meta http-equiv="content-type" 
        content="text/html;charset=utf-8" />

Вы также можете отклонить любой HTML-код, для которого в заголовке отсутствует кодировкав метатеге.

...