Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie linków i ich zamiana na stronie
Forum PHP.pl > Forum > PHP
kajzur
Witam,
chciałbym napisać skrypt, który by wyszukiwał linki w podanym tekscie, i dodawał do nich atrybut notfollow.. Próbowałem napisać to uzywajać wyrażen regularnych:

  1. $txt='afghdaifhdkla <a href="index.php">ggg</a> iojhfoiafjd <b> iohjdoisa</b> <p style="color:red;">dd</p>';
  2.  
  3.  
  4.  
  5.  
  6. preg_match_all('^<a.href=.[a-zA-Z].>[a-zA-Z]<\/a>$',$txt,$linki);
  7. print_r($linki);


Ale dostaje bł±d:

Warning: preg_match_all() [function.preg-match-all]: No ending delimiter '^' found in C:\Program Files\WebServ\httpd-users\Nowy\index.php on line 9

mogę prosic o pomoc? O i jak, jak już znajdzie te linki, zamienić je na linki z atrybutem notfollow?

Pozdrawiam,
Mateusz.
erix
Cytat
mogę prosic o pomoc?

Poczytaj o składni wyrażeń regularnych.

Cytat
O i jak, jak już znajdzie te linki, zamienić je na linki z atrybutem notfollow?

preg_replace
kajzur
Poczytałem, pomy¶lałem, i w sumie błedu nie ma już, ale dostaję pust± tablicę:

Kod
preg_match_all('/^<a.href=[\',"]\w[\',"]>\w<\/a>$/',$txt,$linki);


Array
(
[0] => Array
(
)

)
tehaha
To nie takie proste, bo jeżeli pomiędzy '<a' a 'href' zezwoli na dowolny znak, to wtedy takie co¶:
<a href="podstrona">aaaa</a> fsdjfkdajf <a href="index">bbbbb</a>
zostanie wykryte jako jeden link, trzeba to bardziej ograniczyć, prędzej co¶ takiego:
  1. <?php
  2. $string = ' dsaf sdaf saf as fas<a class="normal_link" href="index.php/podstrona/1" title="tttasa">aa</a> fdsa fsad fsa <a href="index.php">hh</a> fsdf sfsda fsa fa s<a href="podstrona.html" class="super_class" title="tytuł">yyyy</a> <a href="podstrona.html" class="super_class" title="tytuł">yyyy</a> <a href="podstrona.html" class="super_class" title="tytuł">yyyy</a>';
  3.  
  4. $string2 = preg_replace('/<a([A-za-z0-9=\'\" ˇ±ĘęĆ榶ÓóŁłŃń]*)href="([A-za-z0-9.\/]*)"([A-za-z0-9=\'\" ˇ±ĘęĆ榶ÓóŁłŃń]*)>([A-za-z0-9]*)<\/a>/i', '<a$1href="$2"$3 rel="no follow">$4</a>', $string);
  5. echo $string2;
  6. ?>


ale i ten przykład może nie działać do wszystkich linków, musisz z tym trochę pokombinować i pomy¶leć nad wszystkimi znakami jakie mog± być dostępne, albo wykluczyć żeby znaki pomiędzy '<a', 'href' itd nie mogły być zamknięciami i otwarciami tagów html, < , >

//EDIT
to będzie lepsze:
  1. <?php
  2. $string = ' dsaf sdaf saf as fas<a class="normal_link" href="index.php/podstrona/1" title="tttasa">aa</a> fdsa fsad fsa <a href="index.php">hh</a> fsdf sfsda fsa fa s<a href="podstrona.html" class="super_class" title="tytuł">yyyy</a> <a href="podstrona.html" class="super_class" title="tytuł">yyyy</a> <a href="podstrona.html" class="super_class" title="tytuł">yyyy</a>';
  3.  
  4. $string2 = preg_replace('/<a([^<>]*)href="([^<>]*)"([^<>]*)>([^<>]*)<\/a>/i', '<a$1href="$2"$3 rel="no follow">$4</a>', $string);
  5. echo $string2;
  6. ?>

z wykluczeniem < i > wewn±trz, co nie pozwoli żeby 2 linki były rozpoznane jako jeden
To jest wersja lo-fi głównej zawarto¶ci. Aby zobaczyć pełn± wersję z większ± zawarto¶ci±, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.