Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Получение метатега keywords (https://javascript.ru/forum/server/72167-poluchenie-metatega-keywords.html)

wadim 15.01.2018 12:18

Все-таки я не понял, почему кодировка utf-8 не отображается правильно, ведь должна раз это utf-8. Почему utf-8 по разному смотрится?

Aetae 15.01.2018 12:20

Уверен ли ты что там именно utf8? Если уверен, то сами php файлы точно в utf8? А хедер, утверждающий что кодирока именно utf8 ты ставишь?

wadim 16.01.2018 16:52

Всю тему подсказывают как проверить что utf8, думаю точно utf8. На фиг хедер? Вопрос не о том чтобы как можно больше в файл установок напихать, а о том как вообще работает кодировка. Чуть выше я писал что именно меня интересует. Я ни знаю и ни кто не знает на этом форуме этот вопрос. Читайте внимательней вопросы.

laimas 16.01.2018 17:25

Цитата:

Сообщение от wadim
На фиг хедер?

Проанализируйте содержание того, что вы запрашиваете, поймете.

Цитата:

Сообщение от wadim
Вопрос не о том чтобы как можно больше в файл установок напихать, а о том как вообще работает кодировка.

Криво работает, насколько вы можете убедится. А значит надо разобраться почему. Я уже писал, что данная страница не имеет мета тега указывающего кодировку документа, а метод loadHTMLFile заголовки не анализирует. Хотите парится с DOMDocument, тогда так, как уже ранее писалось:

$html = file_get_contents(\'https://javascript.ru/forum/misc/72167-poluchenie-metatega-keywords.html\');

$dom = new DOMDocument();
libxml_use_internal_errors(true);

$dom->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $html);

$title = $dom->getElementsByTagName('title')->item(0)->textContent;

echo $title; //Получение метатега keywords - Javascript-форум


И чтобы это сделать, нужно знать, что данный документ в UTF, а для этого - имеется ли метатег, если нет, то анализировать заголовок.

wadim 17.01.2018 09:15

Проанализируйте содержание того, что вы запрашиваете, поймете. - это я понимаю, только что что подразумевали под хедер? Я думаю это:
<? header("Content-Type: text/html; charset=utf-8"); ?>
Так или иначе по моей логике последнее слово в за установкой кодировки остается за html документом. Я этот код убрал за ненадобностью:
<? header("Content-Type: text/html; charset=utf-8"); ?>
Хотя бывает что не работает на своем сайте кодировка, тогда выручает даже не этот код, а такой:
<? header("Content-Type: text/html; charset=windows-1251"); ?>
Вот и возникает вопрос что за хрень творится с кодировкой, а для этого надо знать не как это исправить, а по чему так происходит. И сейчашний вопрос о том же.
DOMDocument - почему Вы говорите что я парюсь с ним? Чем лучше file_get_contents? DOMDocument быстрей, если надо работать с содержимым страницы, а мне это и надо. Ваш код хорош, но он в два раза медленней, так как там загружаем и file_get_contents и loadHTML. Но можно пробовать и так.
...имеется ли метатег, если нет, то анализировать заголовок. - что за заголовок? title? Что анализировать то? Напишите пожалуйста то что Вы писали, но в полном варианте (код).

laimas 17.01.2018 10:10

Я не знаю что еще можно рассказать по данному вопросу.

1) <? header("Content-Type: text/html; charset=utf-8"); ?> - к контексту данной темы отношения не имеет, ибо вы получая контент стороннего сайта не можете заставить его передать заголовок. А заголовок не обязательно может передаваться РНР, это может делать и Apache. О коллизиях передачи кодировки посредством заголовка и мета тега читайте в сети, есть такое, пересказывать это здесь нет смысла.

2) "Я этот код убрал за ненадобностью ... тогда выручает даже не этот код, а такой" - это потому, что вы не анализируете данные, а действуете методом "научного тыка". Поэтому у вас и "возникает вопрос что за хрень творится с кодировкой". А надо не тыкать, а определить кодировку. Почему она криво определяется, это с вопрос к разработчику. Как это можно решить я показывал. Но решение то основано не на методе тыка, а вставлено ее определение именно такой, в какой и приходит документ.

3) Чем лучше file_get_contents? DOMDocument быстрей - file_get_contents не может быть ни лучше, ни хуже DOMDocument, это кардинально разные вещи, и говорить о скоростях бессмыслица. Вы уж проанализируйте код дабы понять почему file_get_contents.

4) Что анализировать то? - открываем отладчик браузера и запрашиваем страницу этой темы. Смотрим структуру этого документа и видим, что данная страница не имеет указания кодировки посредством <meta http-equiv="Content-Type" content="text/html; charset=utf-8">. А как узнать программно кодировку документа? Только анализируя соответствующий заголовок передаваемый сервером. Узнав ее формируем тег <meta http-equiv="Content-Type" что_узнали> и далее как показано.

Так понятно почему file_get_contents и loadHTML?


Часовой пояс GMT +3, время: 15:10.