Перейти к содержимому


Партнерская программа Kredov

Как получить значение тэга <TITLE>?

#11 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0
0

Отправлено 15 Январь 2011 - 11:19

так ты заголовки парсишь с другой страницы? чего сразу не сказал, кинь в корень .htaccess и пропиши в нем строку


Я в самом начале темы написал :

У меня вот появилась такая необходимость, получить значение тэга <TITLE> ,заданной ,сторонней страницы и вывести результат


При выводе значения <TITLE> заданной в $urlsape страницы ,отображается результат в той кодировке, в которой удаленная страница.
Способ с AddDefaultCharset utf-8 и все подобные указания кодировки моей страницы результата не дают.
Видимо, здесь идет некая специфика самой функции file_get_contents
Содержимое выводится в оригинальной кодировке, не зависимо от установок моего сайта.


$titles=iconv("cp1251", "utf-8", $titles);


iconv ситуацию исправляет, но если документ и так находится в кодировке utf-8 , данное действие не требуется.
Тоесть, нужно прописать некое условие, сделать проверку кодировки переменной $titles и уже в зависимости от этого произвести выше приведенное действие.

Поправьте ,может как-то по-другому можно сразу установить кодировку получаемого содержимого?
  • 0

#12 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0

Отправлено 16 Январь 2011 - 21:43

Вообщем, нашел решение самостоятельно, использую в связке mb_check_encoding и mb_convert_encoding.

if (mb_check_encoding($titles, 'Windows-1251') && !mb_check_encoding($titles, 'UTF-8')){
$titles = mb_convert_encoding($titles, 'UTF-8', 'Windows-1251');
}


Ну и весь код функции с выше приведенным условием:

function parstitle ($urlsape){

if($html_content = @file_get_contents('http://' .$urlsape. '')){
preg_match_all( "|<title>(.*)</title>|sUSi", $html_content, $titles);
$titles = $titles[1][0];
if (mb_check_encoding($titles, 'Windows-1251') && !mb_check_encoding($titles, 'UTF-8')){
$titles = mb_convert_encoding($titles, 'UTF-8', 'Windows-1251');
}
echo $titles;
}else echo "Данные не доступны";
}


Парсим содержимое тега <TITLE> заданной страницы $urlsape и выводим результат в правильной (соответствующей сайту) кодировке.

С помощью выше приведенной функции можно так же парсить и другие теги, допустим <description>.

Всем спасибо за помощь! ;)
  • 0

#13 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 16 Январь 2011 - 21:57

Вместо
if (mb_check_encoding($titles, 'Windows-1251') && !mb_check_encoding($titles, 'UTF-8')){
$titles = mb_convert_encoding($titles, 'UTF-8', 'Windows-1251');
}

Можно просто прописать
$titles=iconv("cp1251", "utf-8\\IGNORE", $titles);

  • 0

#14 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0

Отправлено 16 Январь 2011 - 22:17

Попробовал , на выходе пусто, не выводит ничего.

Есть еще один "косяк" , допустим evrocontract.ru и www.evrocontract.ru дает разный результат на выходе.
$urlsape = evrocontract.ru , выдает "301 Moved Permanently"
$urlsape = www.evrocontract.ru , выдает правильный заголовок.

Заметил это только на этом URL.
Вообщем решил данную проблему добавлением еще одного условия:

function parstitle ($urlsape){

if($html_content = @file_get_contents('http://' .$urlsape. '')){
preg_match_all( "|<title>(.*)</title>|sUSi", $html_content, $titles);
$titles = $titles[1][0];
if (mb_check_encoding($titles, 'Windows-1251') && !mb_check_encoding($titles, 'UTF-8')){
$titles = mb_convert_encoding($titles, 'UTF-8', 'Windows-1251');
}
if ($titles = "301 Moved Permanently") {
$html_content = @file_get_contents('http://www.' .$urlsape. '');
preg_match_all( "|<title>(.*)</title>|sUSi", $html_content, $titles);
$titles = $titles[1][0];
if (mb_check_encoding($titles, 'Windows-1251') && !mb_check_encoding($titles, 'UTF-8')){
$titles = mb_convert_encoding($titles, 'UTF-8', 'Windows-1251');
}
}
echo $titles;
}else echo "Данные не доступны";
}


Получилось громоздко, но работает, я не силен в PHP написал как смог. :)


  • 0

#15 almatar

almatar
  • Пользователь
  • 203 сообщений
  • Репутация: 0

Отправлено 16 Январь 2011 - 22:47

Слишком всё мудрёно господа, всё гениальное просто: <?php echo " $myrow = $title " ?> Не ругайтесь, я не кодер ;)
  • 0

#16 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 16 Январь 2011 - 23:10

Ругаться не будем... просто посмеемся немного ;)
Тут речь изначально шла о распарсивании страницы со стороннего сервера, а не о не совсем понятном (точнее совсем непонятном) выводе $myrow = $title ;)


  • 0


#17 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0

Отправлено 16 Январь 2011 - 23:31

Слишком всё мудрёно господа, всё гениальное просто: <?php echo " $myrow = $title " ?> Не ругайтесь, я не кодер ;)


Да, как это я сразу не додумался! :)
Вы то сами поняли что написали?
  • 0

#18 almatar

almatar
  • Пользователь
  • 203 сообщений
  • Репутация: 0

Отправлено 17 Январь 2011 - 19:50

Я имел виду вот это <?php echo $myrow['title']; ?>. Вы же тут тайтл решили вывести, а чего парить там я так и не понял? Делаем запрос: $result = mysql_query ("SELECT title,meta_d,meta_k,text FROM settings WHERE page='index'",$db);
$myrow = mysql_fetch_array ($result);
В тайтле пишем то что я написал выше <?php echo $myrow['title']; ?> Кодировка страниц по умолчанию, вобщем не обращайте внимание.
  • 0

#19 Kismedia

Kismedia
    Topic Starter
  • Пользователь
  • 315 сообщений
  • Репутация: 0

Отправлено 17 Январь 2011 - 21:37

Да,Вы походу не поняли ,"чего парить там".
Ок, не обращаю внимание.


  • 0

#20 Symphony

Symphony
  • Пользователь
  • 636 сообщений
  • Репутация: 54

Отправлено 17 Январь 2011 - 21:51

almatar, не ленись, читай сначала страницы, и поймешь проблему.
  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru