Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: META - поиск
 
 автор: kran   (11.09.2005 в 18:55)   письмо автору
 
 

Здравствуйте!
Сейчас пробую писать скрипт, общий смысл примерно такой:

В форму на сайте вводится url, и скрипт обработав его должен вывести содержимое страницы между тегами <title></title> и содержимое META-тега description, т.е. название и описание введенной страницы.

сейчас готов кусок кода извлекающий название страницы по введенному url:


$fp=fopen("$url",r);
$file=fread($fp,1500);

$lt1=stristr($file,"<title>");
$pt1=substr($lt1,7);
$lt2=strpos($pt1,"</");
$title=substr($pt1,0,$lt2);

echo $title;



Никак не получается придумать, точный алгоритм обработки и вывода описания страницы тега description.

Если кто может чего-нибудь посоветовать и помочь, напишите пожалуйста!

Спасибо!

   
 
 автор: Евгений Петров   (11.09.2005 в 20:16)   письмо автору
 
   для: kran   (11.09.2005 в 18:55)
 

Помоему твой код неправильно выведет если между <title></title> будет примерно такое:
...
<title>Символ "</" зачем он нужен?</title>
...

   
 
 автор: cheops   (11.09.2005 в 22:00)   письмо автору
 
   для: kran   (11.09.2005 в 18:55)
 

Это можно осуществить при помощи скрипта
<?php 
  $text 
file_get_contents($url); 
  
preg_match("#<META[\s]+name[\s]*=[\s]*['\"]?description['\"]?[\s]*content[\s]*=[\s]*['\"]?([^>\"\']+)['\"]?>#iU"
           
$text$out); 
  echo 
"<pre>"
  echo 
$out[1]; 
  echo 
"</pre>"
?>

   
 
 автор: kran   (12.09.2005 в 00:59)   письмо автору
 
   для: cheops   (11.09.2005 в 22:00)
 

Так, кажется я понял!
Т.е. в данном документе ищем строку по заданному шаблону, a то что находится в шаблоне внутри круглых скобок - это и есть элемент массива с нужными нам данными! КРУТО!

А я еще вот что накопал, и хотелось бы услышать мнение на этот счет, что лучше?


$meta=get_meta_tags($url); 
$description=$meta['description'];


А с <title> можно тогда также поступить! Правильно?

$text = file_get_contents($url); 
  preg_match("#<title>([^<\"\']+)</title>#iU", 
           $text, $out); 
  echo "<pre>"; 
  echo $out[1]; 
  echo "</pre>"; 


Да, а что значит "U" в конце выражения?

Спасибо!

   
 
 автор: cheops   (12.09.2005 в 01:14)   письмо автору
 
   для: kran   (12.09.2005 в 00:59)
 

Да, можно и с title также поступить, здесь даже недавно тема была про title.

Модификатор U изменяет "жадность" регулярного выражения - если в обычном режиме регулярное выражение старается найти как можно более длинное соответствие, то с модификатором U - регулярное выражение старается найти как можно более короткое соответствие http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=7118.
Почитать подробнее о модификатарах можно по ссылке http://www.softtime.ru/dic/id_dic=133&id_group=3.

http://www.softtime.ru/forum/read.php?id_forum=6&id_theme=7298

   
 
 автор: kran   (12.09.2005 в 11:57)   письмо автору
 
   для: cheops   (12.09.2005 в 01:14)
 

И еще один вопрос!

В результате работы скрипта при вводе некоторых сайтов, на выходе получается что-то типа:

порно фото и рассказы
или
УЛБЮБФШ РПТОП Ч ЖПТНБФЕ 3gp ДМС ФЕМЕЖПОБ motorola c 650

Как можно решить проблему, чтобы все выводилось в одной кодировке?

Спасибо!

   
 
 автор: cheops   (12.09.2005 в 13:19)   письмо автору
 
   для: kran   (12.09.2005 в 11:57)
 

Нужно преобразовывать кодировку - первая это UTF-8, вторая KOI8-R. Решать эту проблему следует либо при помощи функций iconv http://www.softtime.ru/group/id_group=11, либо при помощи подручных средств http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3425 и функции convert_cyr_string() http://www.softtime.ru/dic/id_dic=16&id_group=1

   
 
 автор: kran   (12.09.2005 в 20:27)   письмо автору
 
   для: cheops   (12.09.2005 в 13:19)
 

Все прочитал, вроде понятно, но что-то не получается!

А можно разобрать на конкретном примере?

Предположим вводится некий url, скрипт идет по нему и извлекает из этой страницы два значения - название страницы и ее описание, далее определяется текущая кодировка полученных данных. Если кодировка не соответствует windows-1251, то выполняется конвертирование, иначе все нормально и скрипт работает дальше.

Данные для примера:
$utf="продажа машины в кредит";
$koi="УНЕЫОЩЕ Й ЧЕУЕМЩЕ РПЪДТБЧМЕОЙ";

Спасибо!

   
 
 автор: cheops   (13.09.2005 в 01:37)   письмо автору
 
   для: kran   (12.09.2005 в 20:27)
 

Для KOI8-R всё просто
<?php 
  $koi 
"УНЕЫОЩЕ Й ЧЕУЕМЩЕ РПЪДТБЧМЕОЙ";
  echo 
convert_cyr_string($koi,'k','w');
?>

Для UTF-8 уже не получится преобразовать так как бинарные данные побиты кодировкой cp1251 на форуме - нужно текст прямо из источника брать.

PS Определить какая кодировка без указания (например в META-тэге) нельзя - тут только на глазок и запоминать где в какой кодировке данные представлены.

   
 
 автор: kran   (13.09.2005 в 11:18)   письмо автору
 
   для: cheops   (13.09.2005 в 01:37)
 

Т.е. как я понял определить кодировку части текста нельзя, и единственным условием, которое здесь можно применить - это запрашивать кодировку всего документа из мета-тега charset. И уже на основании полученного значения применять конвертацию в нужном направлении.

Я правильно понял?

   
 
 автор: cheops   (13.09.2005 в 14:11)   письмо автору
 
   для: kran   (13.09.2005 в 11:18)
 

да.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования