DublinFrench
2009-10-04 13:12:17 UTC
Salut
Je tente de remplacer des mots cles dans un contenu HTML mais je ne veux
pas remplacer des mots dans des liens, ou situés a l'interieurs de
définitions de tags (titles, ...). Je cherche a remplacer uniquement le
texte réel qui n'est pas situé a l'interieur de balises <a></a>.
Je me suis donc reporté sur la librairie DOM
http://us2.php.net/manual/en/book.dom.php
Mais j'ai des petits soucis avec cette librairie car je peux avoir du
cuntenu HTML dans mes $node->nodeValue meme si $node->hasChildNodes()
retourne false. Il y a meme des cas ou le $node->nodeValue est carrément
une balise HTML car commencant par <span ....
Voici une version réduite de mon script:
Class Parsing
{
public static $listforbiddenTags = array("a", "img", "javascript",
"css", "script");
public static function parseNodes($node, $keyWord, $replacement)
{
$node->normalize();
if ($node->hasChildNodes())
{
$subNodes = $node->childNodes;
foreach ($subNodes as $subNode)
{
parseNodes($subNode, $keyWord, $replacement);
}
}
else
{
if (!in_array($node->parentNode->nodeName,
self::$listforbiddenTags) && $node->nodeType == XML_TEXT_NODE
&& strlen(trim($node->wholeText))>=1 && used($node->nodeValue))
{
$newelement = self::$dom->createTextNode(str_replace($keyWord,
$replacement, $node->nodeValue));
$node->parentNode->replaceChild($newelement, $node);
$node->normalize();
}
}
}
}
$doc->loadHTML($content);
$root = $doc->firstChild;
$doc->normalizeDocument();
Parsing::$dom=$doc;
Parsing::parseNodes($doc, $keyWord, $replacement);
Merci pour vos idées :)
Cheers
DF
--
Je tente de remplacer des mots cles dans un contenu HTML mais je ne veux
pas remplacer des mots dans des liens, ou situés a l'interieurs de
définitions de tags (titles, ...). Je cherche a remplacer uniquement le
texte réel qui n'est pas situé a l'interieur de balises <a></a>.
Je me suis donc reporté sur la librairie DOM
http://us2.php.net/manual/en/book.dom.php
Mais j'ai des petits soucis avec cette librairie car je peux avoir du
cuntenu HTML dans mes $node->nodeValue meme si $node->hasChildNodes()
retourne false. Il y a meme des cas ou le $node->nodeValue est carrément
une balise HTML car commencant par <span ....
Voici une version réduite de mon script:
Class Parsing
{
public static $listforbiddenTags = array("a", "img", "javascript",
"css", "script");
public static function parseNodes($node, $keyWord, $replacement)
{
$node->normalize();
if ($node->hasChildNodes())
{
$subNodes = $node->childNodes;
foreach ($subNodes as $subNode)
{
parseNodes($subNode, $keyWord, $replacement);
}
}
else
{
if (!in_array($node->parentNode->nodeName,
self::$listforbiddenTags) && $node->nodeType == XML_TEXT_NODE
&& strlen(trim($node->wholeText))>=1 && used($node->nodeValue))
{
$newelement = self::$dom->createTextNode(str_replace($keyWord,
$replacement, $node->nodeValue));
$node->parentNode->replaceChild($newelement, $node);
$node->normalize();
}
}
}
}
$doc->loadHTML($content);
$root = $doc->firstChild;
$doc->normalizeDocument();
Parsing::$dom=$doc;
Parsing::parseNodes($doc, $keyWord, $replacement);
Merci pour vos idées :)
Cheers
DF
--