aodot Posté 11 Décembre 2009 Posté 11 Décembre 2009 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.
captain_torche Posté 11 Décembre 2009 Posté 11 Décembre 2009 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;?>
aodot Posté 11 Décembre 2009 Auteur Posté 11 Décembre 2009 (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é 11 Décembre 2009 par captain_torche Inutile de citer le message précédent: on vient de le lire
captain_torche Posté 11 Décembre 2009 Posté 11 Décembre 2009 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
aodot Posté 14 Décembre 2009 Auteur Posté 14 Décembre 2009 (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é 14 Décembre 2009 par captain_torche Inutile de citer le message précédent; on vient de le lire
captain_torche Posté 14 Décembre 2009 Posté 14 Décembre 2009 Ravi d'avoir pu t'aider ! Quand je travaille avec des expressions régulières, j'ai toujours ce lien sous le coude : http://www.lumadis.be/regex/tuto_pcre.php, c'est une véritable mine d'or !
aodot Posté 16 Décembre 2009 Auteur Posté 16 Décembre 2009 (modifié) Je l'ai mis en favoris ;-) Encore un grand merci. Bonne journée. Aymeric Modifié 16 Décembre 2009 par captain_torche Inutile de citer le message précédent; on vient de le lire !
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant