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 :

Optimiser les performances du BBCode [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut Optimiser les performances du BBCode
    Bonjour, je suis entrain de créer un genre de bbcode (en test).
    Mais je me pose certaine question en terme de performance, je n'ai pas encore optimisé sa dans une classe mais l'utilisation de tel ou tel fonction son très importante (pour le moment php 5.2 mais on va upgrader).
    Donc ma question comment puis je améliorer mon code (peut être remplacer preg_replace par autre chose), les données sont assez importante donc je dois faire cette analyse d'entrée de jeu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $synopsis = $data['m_synopsis'];
    $synopsis = preg_replace('#\[b](.*?)\[/b\]#smx', '<strong>$1</strong>', $synopsis);
    $synopsis = preg_replace('#\[i](.*?)\[/i\]#smx', '<i>$1</i>', $synopsis);
    $synopsis = str_replace(array("\n"), array('<br />'),$synopsis);
    Pour l'instant le bbcode est assez basique mais je pense peut être construire mon propre balisage (on verra en son temps), mais mes regex sont elles optimisées, le type de fonction également ?
    Merci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    fait qu'un seul preg replace, et le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     str_replace(array("\n"), array('<br />'),$synopsis);
    fait plutôt un nl2br

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    Bonjour, j'ai appliqué suivant vos conseils :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $patterns = array('#\[b](.*?)\[/b\]#smx','#\[i](.*?)\[/i\]#smx');
    $replace = array('<strong>$1</strong>','<i>$1</i>');
    $synopsis = preg_replace($patterns, $replace, nl2br($data['m_synopsis']));
    Sa fonctionne très bien mais je me pose certaine question sur les regex à appliquer.
    Par exemple j'ai la balise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [color = #888888]tendre[ /color ]
    Quel genre de regex dois je appliquer pour une tel balise.
    PS: j'ai intentionnellement fais des espaces pour ne pas que le forum l’interprète

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    y'a déjà plein de lib de BBCode pourquoi en récréer une ?
    même une extension PHP

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 044
    Par défaut
    Ben j'utilise tinymce pour le bbcode donc je me plie au balisage
    Il me manque uniquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [color = #888888]tendre[ /color ]
    A transformer comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span style="color:#888888">tendre</span>
    Mais je n'ai pas trouver de lib bbcode pourtant j'ai bien regarder, dans mon cas j'ai pas besoin d'écrire une lib un peu de modification par ci par la pour avoir quelques choses de propre

    J'ai essayer avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // ma regex pour la balise color:
    #\[color*=?s*(#[[:xdigit:]]{6})](.*?)[/\color]#smx
    //La balise de remplacement
    <span style="color:$1;">$2</span>
    Sa ne fonctionne pas

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Attention, tu ne peux pas utiliser # comme délimiteur sans l'échapper dans l'expression. Et je pense que tu n'as pas besoin de doubles [] autour de :xdigit:
    Donc quelque chose comme ça, peut-être : (non testé)
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    ~\[color*=?s*(#[:xdigit:]{6})\](.*?)\[\\color\]~smx
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Optimiser les performances try/catch ?
    Par KiLVaiDeN dans le forum Langage
    Réponses: 4
    Dernier message: 14/01/2014, 13h47
  2. Réponses: 0
    Dernier message: 02/04/2010, 09h09
  3. Réponses: 4
    Dernier message: 02/09/2009, 16h31
  4. Comment optimiser les performances de mon PC ?
    Par Celebrate dans le forum Windows XP
    Réponses: 6
    Dernier message: 16/07/2008, 22h08
  5. Réponses: 16
    Dernier message: 04/07/2008, 08h54

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