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

wadim 12.01.2018 21:29

Получение метатега keywords
 
Есть код php. New - редактировал: keywords уже не нужен, заменил на title:

$dom= new DOMDocument('1.0');
@$dom->loadHTMLFile($url);

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

$value_title= mb_convert_encoding($value_title,'HTML-ENTITIES','UTF-8');


Кодировка не работает.

laimas 13.01.2018 02:13

И зачем это mb_convert_encoding($value_title,'HTML-ENTITIES','UTF-8')?

wadim 13.01.2018 08:49

В смысле зачем? Если спрашиваю - значит нужно. Я думаю что такое тема кодировка понятна. В $value_title абракадабра, мне нужно чтобы русские слова были читабельны. Хотя бы для просмотра это нужно, там стоит так же вопрос как сравнивать слова в разных кодировках.

laimas 13.01.2018 09:04

А что в UTF не читаются и зачем в HTML-сущности преобразовывать? Уж если не получается, то не мешало бы сначала выяснить кодировка у исходника.

wadim 13.01.2018 10:35

У исходника разная кодировка может быть, так как сайты и на windows 1251 и на UTF-8 могут быть. А что в UTF не читаются? - не понял вопроса. Я пытаюсь в UTF-8 перевести. Зачем в HTML-сущности преобразовывать? - это Вы про loadHTMLFile($url);? Ну так мне нужно, мож Вы другую архитектуру знаете? Напишите, буду благодарен.

laimas 13.01.2018 11:02

Цитата:

Сообщение от wadim
сайты и на windows 1251 и на UTF-8 могут быть

Ну так определите кодировку исходника и только потом если требуется такая операция, то iconv(). Второй параметр функции mb_convert_encoding() указывает кодировку, в которую требуется перекодировать, а не то, что вы думаете. А третий параметр как раз указывает кодировку исходника, может быть и массивом, а может быть и опущен.

Так во что вы пытаетесь перекодировать? Даже с учетом того, что вы ошибаетесь, найдите хотя бы один сайт, в котором есть ключевые слова требующие HTML-сущностей.

wadim 13.01.2018 12:55

Все понял что Вы сказали, но ни чего не помогло. Исходник в UTF-8, два варианта не помогли:

$value_title= iconv("UTF-8", "UTF-8", $value_title);

$value_title= mb_convert_encoding($value_title, 'UTF-8', 'UTF-8');

Тут вопрос возник зачем вообще преобразовывать UTF-8 в UTF-8, и так по русски должно выводится.

Попробовал так:
$value_title= iconv("UTF-8", "windows-1251", $value_title);

так как windows-1251 у меня часто срабатывало в других проектах. Вообще ни чего не выводит.

Ключевые слова пытаюсь перекодировать. Я не пытаюсь ключевые слова
перекодировать в HTML-сущности, наверно Вы имеете в виду это: @$dom->loadHTMLFile($url);
Но тут все правильно, этот код мне нужен.

laimas 13.01.2018 13:02

Цитата:

Сообщение от wadim
Я не пытаюсь ключевые слова перекодировать в HTML-сущности

mb_convert_encoding($value_title,'HTML-ENTITIES','UTF-8') - это значение $value_title из UTF-8 в HTML-ENTITIES. Читайте документацию.

Цитата:

Сообщение от wadim
Тут вопрос возник зачем вообще преобразовывать UTF-8 в UTF-8, и так по русски должно выводится.

Естественно возникает, это пустое и бесполезное занятие.

URL с чего вы пытаетесь получить приведите.

wadim 13.01.2018 13:26

URL любой может быть. Я взял с произвольного сайта документ и записал себе в файл:

<title> Стратегия игра </title>

Дальше прочел этот файл через URL.

laimas 13.01.2018 15:40

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

К примеру возьмем эту страницу, заголовок ее получим как ПолученР...., то есть utf-8 (детектирование кодировки покажет, что это utf) будет распознано как latin-1 (windows-1252). Вернем нормальную кодировку:

$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTMLFile(\'https://javascript.ru/forum/misc/72167-poluchenie-metatega-keywords.html\');
$title = $dom->getElementsByTagName('title')->item(0)->textContent;
echo $title; //результат Получение метатега keywords - Javascript-форум
//восстановим
$title = mb_convert_encoding($title, 'windows-1252', 'utf-8');
echo $title; //результат Получение метатега keywords - Javascript-форум


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