Dans la fonction doReplace ci-dessous, comment déterminer si l'instance de $ keyword n'est pas un enfant d'un tableau de balises html nommées (h1, h2, h3, h4, h5, h6, b, u, i, etc) à partir du point de remplacement où le mot-clé apparaît dans le contenu? Je ne me soucie pas de vérifier les balises imbriquées à ce stade.Comment déterminer si la chaîne de texte apparaît en tant qu'enfant d'une balise html nommée
Je pense qu'une certaine récursivité serait impliquée, à l'intérieur de la fonction deReplace.
function doReplace($keyword)
{
//if(!is_keyword_in_named_tag())
return ' <b>'.trim($keyword).'</b>';
}
function init()
{
$content = "This will be some xhtml formatted
content that will be resident on the page in memory";
$theContent =
preg_replace_callback("/\b('my test string')\b/i","doReplace", $content);
return $theContent;
}
Donc, si la variable $ content contient ...
<h1>This is my test string</h1>
Puis la chaîne "ma chaîne de test" ne serait pas remplacé.
Mais si la variable #content contient ...
<h1>This is my test string</h1>
<div>This is my test string too <b>my test string 3</b></div>
Ensuite, le contenu serait remplacé ...
<h1>This is my test string</h1>
<div>This is <b>my test string</b> too <b>my test string 3</b></div>
En l'état actuel, vous passez cette variable par valeur. Dans la fonction doReplace, $ keyword n'est rien d'autre qu'une chaîne. Je recommande d'extraire XPath et de faire des vérifications dans init(). – castis
OK, exécutez un xpath sur la chaîne de contenu pour tester le contexte du mot clé avant d'envoyer le mot clé à doReplace()? –