Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2008, 21h38   #1
Membre confirmé
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 238
Points : 238
Par défaut BBCode + HTML

Bonsoir,

Sur mon CMS, je veux donner la possibilité d'utiliser un BBCode pour éditer les pages, en utilisant une balise [html][/html] pour inclure du code HTML. J'utilise la fonction nl2br pour remplacer les sauts de ligne par <br /> mais je voudrais que ça ne s'applique pas à l'intérieur des sections [html]. Comment faire ?
Neuromancien2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2008, 01h49   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Je te suggèrerais d'utiliser un preg_replace_callback, avec une regex détectant ce qui n'est pas inclus entre <html> et </html>, et une fonction de callback encapsulant nl2br.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2008, 16h06   #3
Membre confirmé
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 238
Points : 238
Citation:
Envoyé par Antoun Voir le message
Je te suggèrerais d'utiliser un preg_replace_callback, avec une regex détectant ce qui n'est pas inclus entre <html> et </html>, et une fonction de callback encapsulant nl2br.
J'ai l'expression suivante, qui sélectionne le texte entre [html] et [/html] : '/\[html\](.+?)\[\/html\]/s'. Comment modifier cette expression pour exclure le texte à l'intérieur de cette balise ?
Neuromancien2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2008, 16h13   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Par exemple, avec ça, $1 et $3 contiennent le texte hors [html] :
Code :
 '/(.*?)\[html\](.+?)\[\/html\](.*?)/s'
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2008, 17h24   #5
Membre confirmé
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 238
Points : 238
Citation:
Envoyé par Antoun Voir le message
Par exemple, avec ça, $1 et $3 contiennent le texte hors [html] :
Code :
 '/(.*?)\[html\](.+?)\[\/html\](.*?)/s'
Ce que je voudrais c'est une expression qui fonctionne avec preg_replace_callback() pour appliquer une fonction sur tout le texte qui n'est pas inclut dans les balises [html]. Je ne pense pas que celle-ci convienne.
Neuromancien2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/04/2008, 16h36   #6
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
pourquoi ? tu peux appliquer ton callback à $1 et $3.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/04/2008, 21h59   #7
Membre confirmé
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 238
Points : 238
Citation:
Envoyé par Antoun Voir le message
pourquoi ? tu peux appliquer ton callback à $1 et $3.
Oui, avec une fonction intermédiaire qui prend le tableau résultat en paramètre. Cette fonctionnalité est vraiment puissante...
Neuromancien2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2008, 00h29   #8
Membre confirmé
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 238
Points : 238
En fait, ça ne fonctionne pas tout à fait : La fonction n'est pas appliquée si le texte ne contient pas de balises [html][/html].
Neuromancien2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2008, 00h51   #9
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Fais une exception pour ce cas-là, qui est facile à tester.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2008, 19h35   #10
Membre confirmé
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 238
Points : 238
Ca fonctionne très bien. Merci.

Il me reste encore un problème avec ma syntaxe pour les listes.
nl2br() va me donner :
Code html :
<li>Item</li><br />
J'ai essayé de supprimer les sauts de lignes avant d'appliquer nl2br() :
Code php :
1
2
 
$text = str_replace( array( '</li>\n', '</li>\r\n', '</li>\r' ), '</li>', $text );
Mais ça ne fonctionne pas.
Neuromancien2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 09h09   #11
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
\n et \r ne sont pas interprétés dans les chaines délimitées par des quotes (') mais uniquement dans les chaines délimitées par des guillemets (")

Une remarque sinon sur ton script :
En principe l'utilisation de bbcode est utilisée pour permettre une mise en forme en évitant que l'utilisateur puisse modifier fondamentalement le contenu d'une page html.
Si tu autorise de l'html, ton bbcode ne te sert quasiement plus a rien, autant autoriser l'html directement sans balises.
Petits trucs marrant a tester sur ton site :
Code :
1
2
3
[html]<!-- [/html]
[html]<span style="></span> [/html]
[html]<script>alert(document.cookie());</script> [/html]
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2008, 10h52   #12
Membre confirmé
 
Inscription : mai 2002
Messages : 543
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 543
Points : 238
Points : 238
Citation:
Envoyé par Fladnag Voir le message
\n et \r ne sont pas interprétés dans les chaines délimitées par des quotes (') mais uniquement dans les chaines délimitées par des guillemets (")

Une remarque sinon sur ton script :
En principe l'utilisation de bbcode est utilisée pour permettre une mise en forme en évitant que l'utilisateur puisse modifier fondamentalement le contenu d'une page html.
Si tu autorise de l'html, ton bbcode ne te sert quasiement plus a rien, autant autoriser l'html directement sans balises.
Le code HTML est fastidieux à lire, et les erreurs de saisie viennent vite. C'est pourquoi je préfère le BBCode, avec seulement quelques sections HTML pour les éléments de mise en forme complexes qui ne sont pas gérés par le BBCode (positionnement de div, tableaux...).
Neuromancien2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h42.


 
 
 
 
Partenaires

Hébergement Web