2010-06-24 15 views
3

J'utilise PHP et je cherche à créer des liens dans mon texte à d'autres sections du site ainsi par exemple:Balisage phrases paragraghe

I fell into the media industry aged 30, when David Mansfield, now on the board of 
Ingenious Media, gave me my first break at Thames TV. From there, I worked at the 
(now-defunct) Sunday Correspondent and IPC, before joining TDI, which became Viacom 
and then CBS Outdoor. After 12 years in outdoor, I spent a year out doing overseas 
outdoor consultancy work in Russia, Dubai and Spain, as well as launching the media 
CRM business, Media By Permission. I have been lucky enough to work across a range of 
media, but outdoor would definitely be my specialist subject on 'Mastermind'. 

je voudrais créer un lien Ingenious Media Pour une page tout au sujet Ingenious Media mais je voudrais également relier toutes les mentions de Media à une page liée aux médias.

Il est évident que je ne veux pas lier le mot Media dans Ingenious Media

Comment pourrais-je aller à faire cela sans doubles reliant quelques mots?

Merci à l'avance

Répondre

1

Étape 1 Créez un nouveau tableau contenant les noms des entités que vous voulez 'étiqueter' et ordonnez-lui le plus long nom d'entité au nom d'entité le plus court. Étape 2. Faites une boucle dans ce tableau et remplacez chaque occurrence de l'entité dans le texte par un jeton unique (par exemple ## . rand(100, 999) * rand(100, 999)). Nous faisons cela pour éviter de créer des liens autour d'entités qui font partie d'une autre entité. Étape 3. Créez votre lien et stockez-le dans un autre tableau où la clé pour chaque entrée dans le tableau est le jeton unique et la valeur est le lien que vous venez de créer. Étape 4. Faites une boucle sur le tableau de liens et remplacez les jetons dans le texte par les liens correspondant au jeton dans le tableau.

0

Je ne sais pas si cela est possible avec regexp. Je ferais quelque chose comme ceci:

  1. recherche pour la phrase
  2. vérifier si la phrase est à l'intérieur lien (recherche à droite pour la balise une si elle est begining tag que vous n'êtes probablement pas à l'intérieur et si elle est étiquette eding vous êtes à l'intérieur)
  3. si vous n'êtes pas à l'intérieur remplacer
0
$string = '...your string from above....'; 

// Here we replace only "Media" when there is no "Ingenious " in front of it. 
$string = preg_replace('#(?<!Ingenious)Media#', '<a href="media.html">Media</a>', $string); 

// Here don't need to use a regex... 
$string = str_replace('Ingenious Media', '<a href="ingenious_media.html">Ingenious Media</a>', $string); 
echo $string; 

Je suis sûr, qu'il y ait une meilleure regex, parce qu'il y toujours est-;) mais cette façon il fonctionne, juste testé :)