Ancrage automatique des titres

Résolu/Fermé
Danieldes - Modifié le 22 juin 2020 à 11:33
 Danieldes - 22 juin 2020 à 12:07
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

yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
22 juin 2020 à 11:30
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?
0
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
0
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 1 556
22 juin 2020 à 12:03
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?
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
22 juin 2020 à 11:56
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...


0
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.
0