Aller au contenu

Expressions régulières


Sujets conseillés

Posté

Bonjour à tous,

J'ai un petit soucis. J'ai récupéré une base de donnée de SPIP pour l'intégrer sur un site que j'ai créé.

SPIP utilise des balises (de type <img152>) et non du code HTML pour insérer des images dans un texte.

<img152> : le 152 correspond à l'ID d'une table SQL. Dans cette table le 152 correspond donc à un chemin d'image (images/test.jpg par exemple).

Je dois donc utiliser les expressions régulières pour détecter dans un texte la balise et ensuite la transformer en <img src="ICI LA VALEUR DU CHAMP CHEMIN DE TABLE">.

Avez une petite piste pour que j'avance légèrement car la je suis bloqué.

Merci par avance.

Cordialement.

Posté

Dans ce genre de cas, on va un tout petit peu plus loin qu'une "simple" expression régulière : cette dernière retrouvera facilement l'identifiant de l'image, mais pas son url. On est obligés de passer par une fonction pour faire ça, et on va donc utiliser la fonction preg_replace_callback, qui justement, applique une fonction sur les résultats de l'expression régulière.

Pour commencer, il faut définir l'expression à utiliser pour cibler la chaîne de caractères correcte.

Les images dans les articles de SPIP sont de la forme suivante : <imgXXX|left>, le |left étant facultatif ou pouvant se remplacer par |center ou |right.

J'ai fait ici un petit code qui permet de voir ce que ça donne avec la fonction de callback (fonction que tu devras modifier pour aller rechercher le chemin de l'image en base, en fonction de son id) :

<?php
/* Remplacement des images SPIP par des images HTML */

function get_url_image_spip($spip_id) {
$url_hub = "http://www.webmaster-hub.com/public/style_images/6_4_hub4.png";
$url_loni = "http://www.lonironaute.net/img/edito/inauguration.png";
if($spip_id[1] == 29)
$image = $url_hub;
if($spip_id[1] == 152)
$image = $url_loni;
if($image)
return '<img src="'.$image.'">';
}

$texte = "<p>Voilà deux images que j'apprécie : <img152|left> <img29></p>";

$reg = "#<img([0-9]+)(\|(left|center|right))?>#";
$texte = preg_replace_callback($reg, 'get_url_image_spip', $texte);
echo $texte;?>

Posté (modifié)

Bonjour Captain torche,

Alors la génial ! Réponse très rapide et très clair, un grand merci.

Par contre j'espère ne pas abuser mais j'ai essayé de tester pour faire la même chose sur les liens mais sans succès même en utilisant la même fonction.

Auriez vous une piste ? Sachant que les liens sont sous cette forme : [Accédez à Google->www.google.fr]

Merci par avance.

Cordialement.

Modifié par captain_torche
Inutile de citer le message précédent: on vient de le lire
Posté

Le plus dur est de concocter l'expression régulière ;)

On se retrouve donc avec ça :

<?php

$reg_lien = "#\[(.*)->(.*)\]#Us";
$texte = preg_replace($reg_lien, '<a href="$2">$1</a>', $texte);
?>

Les paramètres à la fin de l'expression régulière sont :

- U pour rendre la capture "non-gourmande" : en gros, elle s'arrête au premier "]" qu'elle rencontre.

- s pour que le point capture également les retours lignes (C'est rare que ça soit utile dans le cadre d'un lien, mais sait-on jamais).

- je rajoute généralement "i" (insensible à la casse), mais c'est pas la peine ici ;)

Posté (modifié)

Bonjour Captain Torche,

Une grand merci pour ton aide précieuse. Cela m'a permis d'avancer rapidement et surtout d'apprendre pas mal de choses.

Bonne journée.

Aymeric

Modifié par captain_torche
Inutile de citer le message précédent; on vient de le lire
Posté (modifié)

Je l'ai mis en favoris ;-)

Encore un grand merci.

Bonne journée.

Aymeric

Modifié par captain_torche
Inutile de citer le message précédent; on vient de le lire !

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...