2011-10-25 7 views
0

Je suis aux prises avec cette expression régulière. J'essaie de remplacer les mots d'une description de produit par un hyperlien. Le code ci-dessus fonctionne si le mot a un espace de chaque côté mais ne fonctionne pas s'il a un arrêt complet, une virgule ou "<". Quelqu'un peut-il repérer mon erreur?problèmes preg_replace

Merci, Simon

+0

Pouvez-vous fournir une ligne d'entrée simple et la sortie désirée? – FailedDev

Répondre

0

Je pense que vous pourriez avoir besoin d'utiliser preg_quote et htmlentities?

$glossary_search[] = "/(^|>|\\s)".preg_quote(htmlentities($glossary["glossary_name"],ENT_COMPAT,'UTF8'))."($|<|\\s)/i"; 
$glossary_replace[] = "\$1<a href='/jargon-buster/".tapestry_hyphenate($glossary["glossary_name"]).".html' title='".$glossary["glossary_name"]."' target='_blank'>".$glossary["glossary_name"]."</a>\$2"; 

return preg_replace($glossary_search,$glossary_replace,$text); 
+0

Salut Benjie, Merci pour votre contribution. Cela fonctionne mais seulement dans la même mesure que le code original. Lorsque quelque chose apparaît directement après le mot, cela ne fonctionne pas. De son propre chef et cela fonctionne parfaitement. – Simon

+0

Pouvez-vous donner un exemple de cette variable $ glossary et des variables $ text qui fonctionnent et ne fonctionnent pas? – Benjie

+0

Salut Benji, Merci pour votre réponse. Il s'avère que pendant mon débogage que j'ai oublié par inadvertance que j'avais dupliqué le code dans mon script. Il s'avère que cela fonctionnait tout le temps mais donnait la mauvaise sortie parce qu'elle était lancée deux fois. Une autre raison pour laquelle c'est une mauvaise idée de mal tourner tard le soir! Merci encore pour votre aide! – Simon