2010-09-16 3 views
1

Je crée des flux RSS en utilisant PHP (5.2) à partir d'une base de données MySQL spécifiquement pour une application iPhone que je réalise via AppMakr.Utiliser Reg Expression pour reformater l'image en flux RSS

Elles sont tirées d'articles sur un site Web qui contiennent des images incorporées, mais dans les flux, elles ne sont pas très belles. Ce que je veux essayer et faire, c'est quand il y a une image qui l'entoure dans <p> donc ils sont sur leur propre ligne et n'essaient pas d'enrouler le texte de l'article.

Le format d'une image est comme ceci:

<a rel="lightbox" href="http://images.domain.comk/543/image1.jpg"><img class="imageright" src="http://images.domain.comk/543/image1.jpg" alt="" width="300" height="250" /></a> 

Donc, fondamentalement, entouré d'un <a href> et avec une classe de "ImageRight" ou "imageleft".

Ce que j'aimerais changer cela est:

<p><img src="http://images.domain.comk/543/image1.jpg" alt="" width="300" height="250" /></p> 

Fondamentalement enlever la classe href et imagexxxx et ses environs dans les balises p.

Je pense que preg_replace va probablement être utilisé, mais à la perte de ce que j'utiliserais réellement pour cela. Toute aide est très appréciée.

+0

C'est une bonne idée de prendre le temps d'en apprendre plus sur les expressions régulières. Utiliser des exemples peut entraîner des bogues difficiles à corriger si vous ne comprenez pas ce que l'expression est en train de faire. –

+0

Si je vous lis bien, n'est-il pas mieux de savoir comment stocker l'URL de l'image dans votre base de données en premier lieu? Par exemple http: //images.domain.comk/543/image1.jpg – Cups

+0

Ouais, stocker l'URL de l'image est deff la façon de faire dans le futur, mais je dois répondre à quelques milliers d'articles écrits avant cela! –

Répondre

1

Vous aurez besoin d'utiliser une expression rationnelle pour faire correspondre comme celui-ci:

<a(.*)><img(.*)class="imageright" (.*)></a> 

Et puis un remplacement regexp comme ceci:

<p><img$2$3></p> 

Ce n'est pas le plus souple, mais il devrait faire l'affaire pour preg_replace()

+0

Un grand merci à tous, avec une combinaison d'aide, j'ai réussi à travailler sur le RegEx nécessaire, j'ai fini par utiliser: '$ imagePattern = '/ /'; $ imageReplacement = '

'; $ intro = preg_replace ($ imagePattern, $ imageReplacement, $ intro); ' –

0

Cette Regex correspond à la paire d'ouverture et de fermeture d'une balise HTML spécifique. Tout ce qui se trouve entre les balises est stocké dans le premier groupe de capture.

'<%TAG%[^>]*>(.*?)</%TAG%>' 

Ceci nous donne un point de départ. Maintenant, nous devons remplacer le <a href></a> avec <p></p>

PHP fournit une méthode simple pour le faire dans preg_replace()

preg_replace ($pattern, $replacement, $text); 

maintenant il suffit d'insérer les valeurs correctes:

$patterns = '<%a%[^>]*>(.*?)</%a%>'; 
$replacement = '<%p%[^>]*>(.*?)</%p%>'; 
$text = ' <a rel="lightbox" href="http://images.domain.comk/543/image1.jpg"><img class="imageright" src="http://images.domain.comk/543/image1.jpg" alt="" width="300" height="250" /></a>'; 

echo preg_replace ($pattern, $replacement, $text); 

C'est un non -test exemple et est destiné à être utilisé comme un modèle. Vous devriez lire http://www.php.net/manual/en/function.preg-replace.php avant de créer votre solution.