2011-05-28 1 views
2

J'ai un tas de texte avec du HTML. Fondamentalement ce que je veux faire est pour tous les liens trouvés dans ce texte Je veux ajouter un rel = "noindex" à chaque lien trouvé seulement si l'attribut title n'est pas présent.Ajouter un attribut nofollow à lier si aucune balise de titre n'est présente avec PHP

Par exemple, si un lien ressemble à ceci:

<a href="test.html">test</a> 

Je veux que ça ressemble à:

<a rel="nofollow" href="test.html">test</a> 

Mais si le lien ressemble à ceci:

<a title="test title" href="test.html">test</a> 

I Je ne veux pas ajouter l'attribut rel = "nofollow" à cela. Comment puis-je faire cela en php?

EDIT:

Im désolé je na pas mentionner cela, mais je me sers PHP4. Oui je sais mais je suis coincé avec PHP4.

+0

utilisation [simple, dom html] (http://simplehtmldom.sourceforge.net/) pour que – Ibu

+0

@Ibu Les frais généraux de cette bibliothèque est énorme par rapport à la difficulté de le faire avec des fonctions natives. – lonesomeday

Répondre

2

Utilisez d'abord la correspondance preg pour obtenir si le titre est ajouté.

$str = '<a href="test.html">test</a>'; 
if(!preg_match('/title=/', $str)) 
{ 
    $str = str_replace('href=', 'rel="nofollow" href=', $str); 
} 
13

Tout simplement avec DOMDocument:

$dom = new DOMDocument; 
$dom->loadHTML($yourHTML); 

$links = $dom->getElementsByTagName('a'); 
foreach ($links as $link) { 
    if (!$link->hasAttribute('title')) { 
     $link->setAttribute('rel', 'nofollow'); 
    } 
} 

$yourHTML = $dom->saveHTML(); 

Ceci est beaucoup plus stable et plus fiable que déblayage environ avec regex.

Questions connexes