Bonjour,
Je suis en train de traiter le problème suivant :
Un document est généré dans le buffer de sortie et je veux le modifier, en l'occurence transformer les titres <Hn>... </Hn> pour générer un sommaire et associer des ancres.
Aucun problème particulier, preg_match_all avec captures puis remplacements avec précautions (voir remarques en notes).
Mais le problème se gâte quand le document est la publication d'un extrait d'un document plus grand (chapitre d'un livre par exemple). Dans ce cas il va falloir rapprocher du document de sortie, la source (HTML en format interne et partiellement encodé de caractères spéciaux) :
J'ai pour l'instant échoué sur le problème suivant : comment fabriquer à partir des tags Hn source non encodés la chaîne qui pourra être recherchée dans le buffer de sortie ?
On pourrait penser que une routine (simplifiée) comme :
1 2 3 4 5
| function ob_sencode ($input) {
ob_start();
echo $input;
return ob_get_clean();
} |
pourrait faire l'affaire en ignorant toutes les définitions d'encodage du contexte.
Mais cela ne marche pas, et je ne vois vraiment pas pourquoi :
Le titre brut :
<h2>L'impact des nouveaux moyens de communication et de traitement de l'information</h2>
revient tel quel de la fonction ob_sencode()
alors que dans le buffer il est encodé :
<h2>Limpact des nouveaux moyens de communication et de traitement de linformation</h2>
Note : C'est évidemment l'exemple élémentaire, dans la pratique c'est tout de suite un peu plus compliqué, mais pouvant être traité, avec les apostrophes, différents guillemets etc. et les fonction spéciales de remplacement du type "texturize" de WordPress
Je n'ai rien trouvé sur la question.
Il y a plusieurs autres solutions plus ou moins complexes pour faire le rapprochement (ré-associer de manière fiable un titre avec son image dans le buffer pour effectuer le remplacement adapté) mais pouvoir générer le code identique parait la plus simple, mais je sèche.
Cordialement
Trebly
Si vous avez une idée, merci d'avance
Notes : Je compléterai au fur et à mesure de la discussion ou à la fin.
Partager