IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

BBCode + HTML


Sujet :

Langage PHP

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    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 ?

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    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.

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    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 ?

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Par exemple, avec ça, $1 et $3 contiennent le texte hors [html] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     '/(.*?)\[html\](.+?)\[\/html\](.*?)/s'

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Par exemple, avec ça, $1 et $3 contiennent le texte hors [html] :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     '/(.*?)\[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.

  6. #6
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    pourquoi ? tu peux appliquer ton callback à $1 et $3.

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    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...

  8. #8
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    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].

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 293
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 293
    Par défaut
    Fais une exception pour ce cas-là, qui est facile à tester.

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <li>Item</li><br />
    J'ai essayé de supprimer les sauts de lignes avant d'appliquer nl2br() :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $text = str_replace( array( '</li>\n', '</li>\r\n', '</li>\r' ), '</li>', $text );
    Mais ça ne fonctionne pas.

  11. #11
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    \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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    [html]<!-- [/html]
    [html]<span style="></span> [/html]
    [html]<script>alert(document.cookie());</script> [/html]

  12. #12
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2002
    Messages
    641
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 641
    Par défaut
    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...).

Discussions similaires

  1. [RegEx] HTML en BBCode dans un système de news
    Par Joe-La-Boule dans le forum Langage
    Réponses: 2
    Dernier message: 01/07/2008, 20h42
  2. [RegEx] Remplacement BBcode par HTML
    Par J0r_x dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2007, 15h47
  3. [RegEx] bbcode vers html qui ne marche pas
    Par jexl dans le forum Langage
    Réponses: 3
    Dernier message: 21/06/2007, 22h05
  4. Réponses: 9
    Dernier message: 23/07/2006, 21h18
  5. Convertir du BBcode en HTML
    Par psychoBob dans le forum Langage
    Réponses: 1
    Dernier message: 20/05/2006, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo