Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> RE - wyszukiwanie adresów linków
Tibod
post 26.06.2007, 20:12:48
Post #1





Grupa: Zarejestrowani
Postów: 108
Pomógł: 2
Dołączył: 9.05.2007
Skąd: INTERNET

Ostrzeżenie: (0%)
-----


Pisze skrypt w którym wyszukuję adresy zapisane z odnośnikach na danej stronie.

  1. <?php
  2. $wyrazenie='#href[W]*=[W]*([-a-z0-9_?&.=]*)[b|>]*#';
  3. ?>


Ogólnie działa dobrze. Jedyny problem to to, że równie dobrze wychwytuje linki typu: gg, javascript, skype itd. Wszystkie one mają jednak wspólną cechę, mianowicie dwukropek

Mógłby mi ktoś pomóc wstawić w to wyrażenie fragment mówiący, że w adresie nie może wystąpić dwukropek. Pewnie to będzie coś w stylu ([^:]*), ale jak go dołożyć do warunków to nie mam pojęcia.


--------------------
"There are only 10 types of people in the world: Those who understand binary, and those who don't"
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
domis86
post 26.06.2007, 23:59:46
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 5
Dołączył: 20.03.2007
Skąd: Kraków

Ostrzeżenie: (30%)
XX---


Ale czasami ":" wystepuje w parametrach (get).
i co wtedy? smile.gif
Go to the top of the page
+Quote Post
Tibod
post 27.06.2007, 09:42:41
Post #3





Grupa: Zarejestrowani
Postów: 108
Pomógł: 2
Dołączył: 9.05.2007
Skąd: INTERNET

Ostrzeżenie: (0%)
-----


Ale w ramach linków jednego sklepu to raczej nie. To raczej przy przenoszeniu na inną witrynę, a to już i tak mnie nie interesuję. Potrzebuję zbadać wyłącznie jedną domenę (na raz).


--------------------
"There are only 10 types of people in the world: Those who understand binary, and those who don't"
Go to the top of the page
+Quote Post
Kicok
post 27.06.2007, 19:40:36
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


masz trzy możliwości do zapisania linków w hrefach:
Kod
1. <a href="link.html">sadsad</a> <a href="link.html" class="asd">sadsad</a>
2. <a href='link.html'>sadsad</a> <a href='link.html' class='sad'>sadsad</a>
3. <a href=link.html>asdsafd</a> <a href=link.html class=csa>asdsafd</a>


Analizując to można dojść do wniosku, że jeśli link zaczął się cudzysłowem lub apostrofem, to zakończy się odpowiednio cudzysłowem lub apostrofem. Jeśli nie został użyty żaden z tych znaków, to link zakończy się przy pierwszym białym znaku lub pierwszym ">". Składając to do kupy otrzymujemy takie oto działające, ale kompletnie niezrozumiałe dla niedoświadczonych wyrażenie:

  1. <?php
  2.  
  3.  
  4. $link = 'as<a href="link_1.html">link1</a>sad dsa <a href="link_2.html" class="cos">link2</a>asdsd
  5.  asdsaf<a href='link_3.html'>link3</a>sad dsa <a href='link_4.html' class="cos">link4</a>asdsd
  6.  ds d<a href=link_5.html>link5</a>dsf gds dg <a href=link_6.html class="cos">link6</a>ds dsg ';
  7.  
  8. if( preg_match_all( '/<a[^>]+?hrefs*?=s*?("|')?(.*?)(?(1)1[^>]*>|(?:s[^>]*>|>))(.*?)</a>/si', $link, $sub ) ) {
  9. echo '<pre>' . htmlspecialchars( print_r( $sub, true ) ) . '</pre>';
  10. }
  11.  
  12. ?>


Ew. możesz sprawdzać, czy w już znalezionych danych jest dwukropek (strpos" title="Zobacz w manualu PHP" target="_manual) - jeśli tak, to olewasz te dane i przechodzisz do następnych.



PS. To oczywiście nie jest gotowiec, tylko ogólny wzór pobierania linków z kodu HTML. Musisz go sobie jeszcze przerobić. Jednak zamiana (.*?) na "wszystko tylko nie dwukropek" będzie o wiele prostsza niż zamiana ([-a-z0-9_\?\\&\.=]*) na "wszystko tylko nie dwukropek" ;]

Ten post edytował Kicok 28.06.2007, 06:42:58


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:45