12.01.2018, 21:29
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
Получение метатега 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');
Кодировка не работает.
Последний раз редактировалось wadim, 13.01.2018 в 00:02.
|
|
13.01.2018, 02:13
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
И зачем это mb_convert_encoding($value_title,'HTML-ENTITIES','UTF-8')?
|
|
13.01.2018, 08:49
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
В смысле зачем? Если спрашиваю - значит нужно. Я думаю что такое тема кодировка понятна. В $value_title абракадабра, мне нужно чтобы русские слова были читабельны. Хотя бы для просмотра это нужно, там стоит так же вопрос как сравнивать слова в разных кодировках.
|
|
13.01.2018, 09:04
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
А что в UTF не читаются и зачем в HTML-сущности преобразовывать? Уж если не получается, то не мешало бы сначала выяснить кодировка у исходника.
|
|
13.01.2018, 10:35
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
У исходника разная кодировка может быть, так как сайты и на windows 1251 и на UTF-8 могут быть. А что в UTF не читаются? - не понял вопроса. Я пытаюсь в UTF-8 перевести. Зачем в HTML-сущности преобразовывать? - это Вы про loadHTMLFile($url);? Ну так мне нужно, мож Вы другую архитектуру знаете? Напишите, буду благодарен.
|
|
13.01.2018, 11:02
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от wadim
|
сайты и на windows 1251 и на UTF-8 могут быть
|
Ну так определите кодировку исходника и только потом если требуется такая операция, то iconv(). Второй параметр функции mb_convert_encoding() указывает кодировку, в которую требуется перекодировать, а не то, что вы думаете. А третий параметр как раз указывает кодировку исходника, может быть и массивом, а может быть и опущен.
Так во что вы пытаетесь перекодировать? Даже с учетом того, что вы ошибаетесь, найдите хотя бы один сайт, в котором есть ключевые слова требующие HTML-сущностей.
|
|
13.01.2018, 12:55
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
Все понял что Вы сказали, но ни чего не помогло. Исходник в 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);
Но тут все правильно, этот код мне нужен.
|
|
13.01.2018, 13:02
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Сообщение от wadim
|
Я не пытаюсь ключевые слова перекодировать в HTML-сущности
|
mb_convert_encoding($value_title,'HTML-ENTITIES','UTF-8') - это значение $value_title из UTF-8 в HTML-ENTITIES. Читайте документацию.
Сообщение от wadim
|
Тут вопрос возник зачем вообще преобразовывать UTF-8 в UTF-8, и так по русски должно выводится.
|
Естественно возникает, это пустое и бесполезное занятие.
URL с чего вы пытаетесь получить приведите.
|
|
13.01.2018, 13:26
|
Профессор
|
|
Регистрация: 20.01.2014
Сообщений: 150
|
|
URL любой может быть. Я взял с произвольного сайта документ и записал себе в файл:
<title> Стратегия игра </title>
Дальше прочел этот файл через URL.
|
|
13.01.2018, 15:40
|
Профессор
|
|
Регистрация: 14.01.2015
Сообщений: 12,990
|
|
Понятно теперь о каких проблемах речь. Если кодировка источника не указывается, то распознавание ее может быть некорректное. Различные примеры можно посмотреть к примеру тут.
К примеру возьмем эту страницу, заголовок ее получим как ÐолÑÑенР...., то есть 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-форум
|
|
|
|