Ancrage automatique des titres [Résolu]

Signaler
-
 Danieldes -
Bonjour,


Afin de pouvoir générer facilement un sommaire, j'ai besoin d'ancrer les titres de mes pages web. Ne pouvant le faire manuellement, je cherche à le faire dans un programme php, quelque chose comme :

$texte = preg_replace('<(h[1-6])>(.*?)</\1>#i', '<$1 id=\'numéro\'>$2</$1>', $texte);


Où numéro serait un chrono qui changerait pour chaque titre (001, 002, 003, 004... 999)
Pour, partant de là :
<h1>Titre principal</h1>
<h2>Premier chapitre</h2>
<h3>Sous-chapitre</h3>
<h3>Sous-chapitre</h3>
<h2>Second chapitre</h2>
<h3>Sous-chapitre</h3>
<h2>Troisième chapitre</h2>
<h2>Quatrième chapitre</h2>


obtenir quelque chose comme :

<h1 id='001'>Titre principal</h1>
<h2 id='002'>Premier chapitre</h2>
<h3 id='003'>Sous-chapitre</h3>
<h3 id='004'>Sous-chapitre</h3>
<h2 id='005'>Second chapitre</h2>
<h3 id='006'>Sous-chapitre</h3>
<h2 id='007'>Troisième chapitre</h2>
<h2 id='008'>Quatrième chapitre</h2>


J'ai consulté la doc des regex mais j'ai bien peur que ce ne soit pas possible de faire ça dans une regex.

Quelqu'un a-t-il une idée ?

Vous en remerciant par avance

Cordialement

4 réponses

Messages postés
11491
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 juillet 2020
656
bonjour,
pourquoi ne peux-tu pas le faire manuellement?
ces pages web sont-elle générées pas du php?
comment obtiens-tu ce dont tu pars?
Bonjour,

Merci pour ta réponse.

Mais ce sont des pages pour lesquelles on me demande de rajouter des sommaires et des tables des matières et il y en a pas mal. Donc pas possible de faire ça manuellement

Cordialement
Messages postés
11491
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
8 juillet 2020
656
ce sont des pages statiques et tu veux modifier en une fois tous les fichiers contenant ces pages?
ou bien veux-tu agir au moment où la page est visitée?
tu donnes très peu d'informations.
pourquoi en php?
Messages postés
28921
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
8 juillet 2020
2 605
Bonjour,

Perso... moi je le ferai en javascript...
Une fois la page "générée" .. il est assez facile de parcourir chaque <h*> pour créer un sommaire...


Bonjour Jordane,

Oui, pourquoi pas, sauf que dans mon cas d'utilisation ces sommaires vont également permettre d'alimenter une base de données pour pouvoir faire des recherches rapides sur l'ensemble des pages.
Par conséquent cela doit être fait côté serveur.

Mais à nouveau en cherchant dans la doc php, je pense avoir trouvé. Il faut utiliser preg_replace_callback

$texte = preg_replace_callback('<(h[1-6])>(.*?)</\1>#i', 'ancrage', $texte);


Où ancrage est simplement une fonction à définir avant l'appel. La fonction ancrage récupère le pattern trouvé et peut le modifier à sa guise ces données, ce qui résout ma problématique

Merci pour vos suggestions.

Je peux clôturer le sujet.