D'un point de vue purement professionnel (parce que le traitement et la reprise de données, c'est chiant mais c'est un peu mon métier), je défends l'enregistrement en base en BBCode pour les raisons suivantes :
- Le HTML, c'est dégueulasse. Paye ta relecture. C'était l'argument troll, maintenant on passe aux choses sérieuses.
- Je préfère maintenir une approche plus ou moins MVC et séparer le modèle (ce qui est enregistré en base) de la vue (la façon d'afficher ces données) de manière assez étanche. le BBCode est une bonne pratique de ce point de vue, on indique ce qu'on veut afficher (image, italique, gras etc.) dans le modèle, tout en laissant au métier et/ou à la vue le soin de traduire cette information en code HTML. Oui, je sais, mon code ne respecte pas le MVC.
- Si demain on décide que finalement, on veut faire la moindre modif dans la manière d'afficher quoi que ce soit, faudra se retaper la reprise sur toutes les entrées de la base au lieu de juste modifier un paramétrage (la regex). Dans un contexte professionnel, si j'annonce qu'il faut se retaper toute la base pour changer la couleur d'un titre au lieu de modifier un composant d'affichage, au mieux il me rit au nez, au pire il convoque mon N+2 pour qu'il lui explique pourquoi il faut payer 30j pour changer une couleur.
- Lors de l'édition, il faudra détricoter le HTML pour le reconvertir en BBCode pour que ça soit lisible par l'auteur, pour le reconvertir en HTML à la sauvegarde. Au moindre bug dans un sens comme dans l'autre, l'article va se retrouver en vrac.
- Sur le forum, les posts sont sauvegardés en BBCode. Ça a jamais gêné personne
- La performance est-elle critique à ce point ? Je ne connais pas les stats du site mais je ne pense pas qu'on serve des milliers ou même des centaines de pages par seconde.
- Quelle est l'origine des bugs d'affichage dont tu parles ? S'il s'agit de l'interprétation du BBCode par la regex, le problème sera identique en sauvegardant en HTML. Il vaudrait mieux travailler cet aspect avant de tout vouloir casser.
Cependant, tu veux absolument enregistrer les données au format HTML dans la BDD, on peut imaginer une reprise automatique sur les données existantes en utilisant la regex de formatage. Je suppose que c'est faisable en PHP facilement, au pire avec un ETL open source genre Talend on peux faire ça en 1/2h. Ou un sed sur le dump. C'est bien, sed. Hmmm des regex...
On peut imaginer à la rigueur une solution hybride : on garde la critique en BBCode pour édition et référence, on ajoute un champ "critique/article/news etc. HTML" supplémentaire qui sera généré à l'enregistrement et qui sera appelée pour l'affichage sur le site, comme ça on soulage le serveur à l'affichage et on conserve le texte original, protégé de tout débordement de traitement automatique. En cas de montée de version du module d'affichage, il suffirait de jouer une reprise (via l'IHM admin ?) qui remplacerait le texte formaté, interprété depuis le texte original en BBCode, utilisant la nouvelle version du module d'affichage.