Aller au contenu

Passer une note style 'BBcode' en HTML


Sujets conseillés

Posté (modifié)

Bonsoir,

J'ai des textes avec notes de bas de page que j'importe de MySQL.

Je voudrais pouvoir convertir, par exemple [n1] en

<sup><a href="#nf1" id="n1">1</a></sup>

[n2] en

<sup><a href="#nf2" id="n2">2</a></sup>

Et ainsi de suite.

Mais j'avoue que j'ai du mal à commencer. Ce qui m'embête c'est bien sûr que le numéro change. Il faudrait pouvoir faire : cherche tous les [nx] et remplace par le code

<sup><a href="#nfx" id="nx">x</a></sup>

Seulement je ne sais pas trop comment cela serait possible.

Quelqu'un pourrait me mettre sur la voie ?

Merci d'avance

Modifié par Imp
Posté

Bonsoir,

les expressions régulières servent à ce genre de tâches :

<?php
 $text = 'Voila une note [n1] et une autre [n2].';
 $text = preg_replace('/\[n([0-9]+)\]/i','<sup><a href="#nf\\1" id="n\\1">\\1</a></sup>',$text);
 echo $text;
?>

Si c'est nouveau pour toi, le manuel PHP donne des explications sur la syntaxe des masques et des options de recherches.

En l'occurrence, le masque utilisé dans ce cas est assez simple (on peu faire beaucoup plus compliqué). Le maque doit être délimité, dans notre cas j'ai choisis "/" comme délimiteur, après le délimiteur de fin il y a un "i" qui définit que le marque est insensible à la casse (majuscules/minuscules sans importance). Ensuite "\[" représente le caractère "[" mais étant donnée qu'il s'agit également du caractère utilisé pour créer une classe de caractère il faut l'échapper (avec un antislash), il en va de même pour "\]". Après le "n" correspond au "n" de ta balise, puis j'ouvre une parenthèse pour créer un sous-masque, à l'intérieur je crée une classe de caractères de 0 à 9 (d'où le "0-9") et je précise qu'il doit y avoir au moins 1 caractère ou plus de cette clase (comme ça [n1245] sera aussi reconnu...enfin c'est pour te montrer qu'il n'y a pas de "limite")...

Dans le deuxième paramètre de preg_replace, je spécifie ce qui remplacera les morceaux qui auront correspondu au masque. La seule particularité est l'utilisation des références arrières, dans ce cas c'est "\\1", il indique que c'est le contenu premier sous-masque qui devra être ajouté ici (dans notre cas c'est le numéro de la note)... Le paramètre suivant est la chaîne à analyser.

Posté

bonjour,

Merci beaucoup d'avoir donné la solution et surtout l'explication :) Ca m'ouvre de belles perspectives !

Veuillez vous connecter pour commenter

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



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