Trebam regularni izraz da dodaje "nofollow" u linku

383 pogleda
Mario Daka pitano 15.02.2014. u kategoriji Web Programiranje od korisnika Mario Daka Superaktivan (7,333 bodova)

Dakle, izvadim iz baze sadržaj (čitaj: string) u HTML-u sa svim i svačim od HTML elemenata, a među njima je u tom stringu i hrpa URL-ova unutar taga <a href>. E sad, trebao bih sve te tagove provjeriti da li imaju već nofollow paramtera u tagu tj. ako nemaju, kako da ga dodam na sve linkove tog stringa?

Imam npr. ovo:

  • <a class="crveni" href="http //nesto.hr">Nešto je link</a>

...i želim pretvoriti sve takve u ovo:

  • <a rel="nofollow" class="crveni" href="http //nesto.hr">Nešto je link</a>

Znate da to trebam kako bi sačuvao tzv. link-juice. Zbog SEO metoda. Programiram u PHP-u.

1 odgovor

+4 glasova
Hrvoje odgovoreno 16.02.2014. od korisnika Hrvoje Superaktivan (5,824 bodova)
selected 18.05.2014. od korisnika Mario Daka
 
Najbolji odgovor

Evo jednog od modernijih rješeanja u PHP-u:

$str = '<a href="http //localhost/test/">interno</a>
<a href="http //localhost/mytest/go/hostgator">neki link</a>
<a href="http //nesto.hr" rel="me">vanski link</a>
<a href="http //svastanesto.com">vanjski</a>
<a href="http //example.com" rel="nofollow">vanjski al
već sa nofollow</a>';
 
$dom = new DOMDocument();
$dom->preserveWhitespace = FALSE;
$dom->loadHTML($str);
$a = $dom->getElementsByTagName('a');
$host = strtok($_SERVER['HTTP_HOST'], ':');
 
foreach($a as $anchor) {
        $href = $anchor->attributes->getNamedItem('href')->nodeValue;
 
        if (preg_match('/^https?:\/\/' . preg_quote($host, '/') . '/', $href)) {
           continue;
        }
 
        $noFollowRel = 'nofollow';
        $oldRelAtt = $anchor->attributes->getNamedItem('rel');
 
        if ($oldRelAtt == NULL) {
            $newRel = $noFollowRel;
        } else {
            $oldRel = $oldRelAtt->nodeValue;
            $oldRel = explode(' ', $oldRel);
            if (in_array($noFollowRel, $oldRel)) {
                continue;
            }
            $oldRel[] = $noFollowRel;
            $newRel = implode($oldRel,  ' ');
        }
 
        $newRelAtt = $dom->createAttribute('rel');
        $noFollowNode = $dom->createTextNode($newRel);
        $newRelAtt->appendChild($noFollowNode);
        $anchor->appendChild($newRelAtt);
}
 
var_dump($dom->saveHTML());

Slična pitanja

1 odgovor 156 pogleda
1 odgovor 212 pogleda
1 odgovor 282 pogleda
1 odgovor 2,070 pogleda
Mario Daka pitano 30.06.2014. u kategoriji Web Programiranje od korisnika Mario Daka Superaktivan (7,333 bodova)
1 odgovor 506 pogleda
Znatko

Znatko je edukativni web servis online zajednice za pretraživanje pitanja, postavljanje pitanja i odgovaranje na pitanja.

..:: POSTAVITE PITANJE ::..

Znatko Vam može pomoći!

2,046 pitanja

2,664 odgovora

1,319 komentara

703 korisnika

Gdje pratiti Znatka?

Koga preporuča Znatko?



Web::Edukacija

CISEx

Kontaktirajte Znatka kako biste mogli i Vi postati preporučeni partneri te sudjelovati u mjesečnom nagradnom fondu!
...