Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#26 26-08-2006 10:25:37

nicolas2k10
Membre

Re : XHTML 2 BBcode - help me please ! :D

Oui mais, dans beaucoup de cas, c'est moins clair (donc moins utilisé).
Voici un comparatif de timing (sur 200 itérations) :

"Le résultat est exprimé en secondes. La regex la plus rapide est à 100%."

Motif#1 preg_match_all
#<a href="[^"]*">#U

Durée: 0.0014410018920898 sec. (100 %)

Motif#2 preg_match_all
#<a href=".*">#U

Durée: 0.0014619827270508 sec. (101 %)

Cela reste TRES minime dans beaucoup de cas mais de façon générale, il faut EVITER d'utiliser à tout va le point. wink

EDIT: Et en plus, comme tu le dis : "pour une raison ou une autre il peut y avoir des chevrons"...

Dernière modification par nicolas2k10 (26-08-2006 10:31:15)

Hors ligne

#27 26-08-2006 10:28:58

vin100
Membre

Re : XHTML 2 BBcode - help me please ! :D

hey ! t'es déjà debout ?! Faut dormir dans la vie ! tongue

bon voilà ce que ça donne maintenant :

    /**
     * @function simpleXhtml2bbcode
     *
     * Transforme les balises XHTML en BBcode et 
     * supprime celles qui n'ont pas d'équivalant.
     *
     * Merci à Nicolas (nicolas2k10 sur punbb.fr) 
     * pour les regex des liens.
     *
     * @param    string    str        Chaîne à convertir
     * @return string
     */
    function simpleXhtml2Bbcode($str)
    {
        $pattern = array(
            '#<span\s*style="\s*color:\s*([a-zA-Z]*|\#?[0-9a-fA-F]{6})\s*;?\s*">(.*?)</span>#s',
            '#<a(?:\s|\w*="[^"]*")*href="(?=mailto)mailto:([^"]+)"[^>]*>(.*)</a>#Us',
            '#<a(?:\s|\w*="[^"]*")*href="(?!mailto)([^"]+)"[^>]*>(.*)</a>#Us',
            '#<img(?:\s|\w*="[^"]*")*src="(.*)"[^/]*/>#Us',
            '#<strong[^>]*>(.*?)</strong>#s',
            '#<em[^>]*>(.*?)</em>#s',
            '#<blockquote[^>]*>(.*?)</blockquote>#s',
            '#<li[^>]*>(.*?)</li>#s',
            '#<p[^>]*>(.*?)</p>#s'
        );
        $replace = array(
            '[color=$1]$2[/color]',
            '[email=$1]$2[/email]',
            '[url=$1]$2[/url]',
            '[img]$1[/img]',
            '[b]$1[/b]',
            '[i]$1[/i]',
            '[quote]$1[/quote]
',
            '* $1',
            "$1\n\n"
        );
        $str = preg_replace($pattern, $replace, $str);
        
        $pattern = array('<br />', '    ', '  ', '  ');
        $replace = array("\n", "\t", '  ', '  ');
        $str = str_replace($pattern, $replace, $str);

        return strip_tags($str);
    }

Hors ligne

#28 26-08-2006 10:30:44

vin100
Membre

Re : XHTML 2 BBcode - help me please ! :D

nicolas2k10 a écrit :

Oui mais, dans beaucoup de cas, c'est moins clair (donc moins utilisé).
Voici un comparatif de timing (sur 200 itérations) :

"Le résultat est exprimé en secondes. La regex la plus rapide est à 100%."

Motif#1 preg_match_all
#<a href="[^"]*">#U

Durée: 0.0014410018920898 sec. (100 %)

Motif#2 preg_match_all
#<a href=".*">#U

Durée: 0.0014619827270508 sec. (101 %)

Cela reste TRES minime dans beaucoup de cas mais de façon générale, il faut EVITER d'utiliser à tout va le point. wink

ok bon de toutes façons cette fonction ne sera pas utilisée à l'affichage, mais avant d'enregistrer les données, donc même si ça prend un petit peu plus de temps c'est pas dramatique wink

Hors ligne

#29 26-08-2006 10:32:35

nicolas2k10
Membre

Re : XHTML 2 BBcode - help me please ! :D

wink

vin100 a écrit :

hey ! t'es déjà debout ?! Faut dormir dans la vie ! tongue

J'ai pas dormi mais j'hésite à y aller ou pas là lol happy

Pcq je bosse sur une nouvelle mod (héhé) : Toggle (afficher/masquer du texte, image, etc.). Peut être utile par exemple pour cacher une réponse ou du code. smile
Et faut que j'avance dans PunMultimedia en plus me ! Des gens attendent... (n'est-ce pas Pafpaf et Fpouget lol)...

Dernière modification par nicolas2k10 (26-08-2006 10:36:37)

Hors ligne

#30 26-08-2006 11:00:13

Domos
Membre

Re : XHTML 2 BBcode - help me please ! :D

Tu peux peut-être rajouter les acronym ?

Dernière modification par Domos (01-05-2009 14:42:32)

Hors ligne

#31 26-08-2006 20:26:43

nicolas2k10
Membre

Re : XHTML 2 BBcode - help me please ! :D

Amélioration pour les e-mails : format WORD@WORD.XX(XX) (avec entre 2 et 4 pour l'extension)

'#<a(?:\s|\w*="[^"]*")*href="(?=mailto)mailto:(\w+@\w+\.[a-z]{2,4})"[^>]*>(.*)</a>#Us',

Support de la conversion de tout type multimédia (balise object seulement car Xhtml ici avec toujours la possibilité d'avoir des attributs et paramètres supplémentaires smile) [nécessite le futur PunMultimedia pour la balise media (je vais rajouter la possibilité de prendre en option la taille mais je post déjà ceci) happy] :

Pattern (--> REMODIFIE <--) :

'#<object.*(?: type="[^"]*")+.*(?: data="(.*)")+[^>]*>.*<param name="(?:filename|movie|src|url|file)+" value=".*"[^/]*/>.*</object>#Us',

Replace :

'[media]$1[/media]',

smile

Vin100, tu as oublié les ? à chaque première étoile pour la partie "autres remplacements". Soit tu en mets partout (sauf exception) et tu ne mets pas l'option U (ungreedy -> non-gourmand), soit tu en mets null part et tu mets l'option U. wink [exemple ici pour la balise "em"]

'#<em[^>]*>(.*?)</em>#s',

deviendra :

'#<em[^>]*?>(.*?)</em>#s',
'#<em[^>]*>(.*)</em>#Us',  // <-- ou bien ceci (U rajoutera le ? auto.)

Les résultats du timing parlent d'eux-mêmes de toute façon :

"Le résultat est exprimé en secondes. La regex la plus rapide est à 100%.
Le temps d'exécution des regex, en mode timing, est calculé sur 200 boucles."

Motif#1 preg_match_all
#<strong[^>]*?>(.*?)</strong>#s

Durée: 0.0024778842926025 sec. (100 %)

Motif#2 preg_match_all
#<strong[^>]*>(.*?)</strong>#s

Durée: 0.0035021305084229 sec. (141 %)

wink

EDIT : --> PATTERN MEDIA REMODIFIE <--

Dernière modification par nicolas2k10 (26-08-2006 20:40:29)

Hors ligne

#32 26-08-2006 20:44:05

vin100
Membre

Re : XHTML 2 BBcode - help me please ! :D

en fait je me limite au bbcode de base de punbb car on peut pas présumer à l'avance quelle mod ont étaient installées sur punbb

mais ça pourra servir à d'autres qui parcoureront cette discussion wink

Hors ligne

#33 26-08-2006 20:48:49

nicolas2k10
Membre

Re : XHTML 2 BBcode - help me please ! :D

Ouép (et ça m'exerce lol) wink

Sinon pour la détection, un petit rajout conditionnel est toujours possible :

if(file_exists(PUN_ROOT.'punmultimedia.php')) {
    $pattern[] = '#<object....#Us';
    $replace[] = '[media]$1[/media]';
}

Dernière modification par nicolas2k10 (26-08-2006 20:58:33)

Hors ligne

#34 26-08-2006 23:17:06

vin100
Membre

Re : XHTML 2 BBcode - help me please ! :D

ah oui éventuellement c'est pas bète

Hors ligne

#35 10-04-2007 11:05:16

vin100
Membre

Re : XHTML 2 BBcode - help me please ! :D

récapitulatif de la fonction sans le support pour la mode média qui n'a finalement jamais vu le jour :

    /**
    @function xhtml_to_bbcode
    @author Nicolas (nicolas2k10 on punbb.fr)
    
    Transforme les balises XHTML en BBcode et 
    supprime celles qui n'ont pas d'équivalent.
    
    @param string str    Chaîne à convertir
    @return string
    */
    function xhtml_to_bbcode($str)
    {
        # Valeur non-vide (exemple> src="'.$value.'" matchera src="qqchose")
        $value = '[^"]+';
        
        # 0 ou + paramètres et/ou espacements avant UN AUTRE PARAMETRE
        $attr = '(?:\s|[a-zA-Z-]+="'.$value.'")*';
        
        # Idem pour du CSS (exemple> text-decoration: none;)
        $attr_css_not_color = '(?:\s|(?!color)[a-zA-Z-]+\s*\:\s*[^;]*;)*';
        
        # 0 ou + paramètres et/ou espacements avant le > final
        $attr_avant_crochet = '[^>]*';
        
        # 0 ou + paramètres et/ou espacements avant le / (pour les balises seules)
        $attr_avant_slash = '[^/]*';
        
        # Espacements (retours de ligne, tabulations, espaces, etc.)
        $blank = '\s+';
        
        # Format des adresses e-mail
        $format_email = '\w+@\w+\.[a-z]{2,4}'; 


       /*
            - Pour les éléments dont on A BESOIN DE CAPTURER LES ATTRIBUTS 
                COMME src="..." href="..." pour le remplacement
            - Pour les exceptions (tel que la balise "p" qui n'est pas convertie
              en BBCode)
        */
        $pattern = array(
            '#<span'.$attr.'style="'.$attr_css_not_color.'color\s*\:\s*([a-zA-Z-]+|\#?[[:xdigit:]]{6})\b[^"]*">(.*)</span>#Us',
            '#<a'.$attr.'href="(?=mailto)mailto:('.$format_email.')"'.$attr_avant_crochet.'>(.*)</a>#Us',
            '#<a'.$attr.'href="(?!mailto)('.$value.')"'.$attr_avant_crochet.'>(.*)</a>#Us',
            '#<img'.$attr.'src="('.$value.')"'.$attr_avant_slash.'/>#Us',
            '#<li'.$attr_avant_crochet.'>(.*)</li>#Us',
            '#<p'.$attr_avant_crochet.'>(.*)</p>#Us'
        );
        $replace = array(
            '[color=$1]$2[/color]',
            '[email=$1]$2[/email]',
            '[url=$1]$2[/url]',
            '[img]$1[/img]',
            '* $1',
            "$1\n\n"
        );

        /*
            Pour tous les élements dont ON N'A PAS BESOIN DE CAPTURER LES
            ATTRIBUTS COMME src="..." href="..." pour le remplacement
        */
        $xhtml  = array('h[1-6]', 'strong', 'em', 'blockquote');
        $bbcode = array('b', 'b', 'i', 'quote');

        $count  = count($xhtml);
        for ($i=0; $i<$count; $i++)
        {
            $pattern[] = '#<('.$xhtml[$i].')'.$attr_avant_crochet.'>(.*)</\1>#Us';
            $replace[] = '['.$bbcode[$i].']$2[/'.$bbcode[$i].']';
        }

        /*
            Pour permettre de traiter des pages entières 
            via une URL (supprime script, style, title, etc.)
        */
        $pattern[] = '#<head>.*</head>#Us';
        $replace[] = '<head></head>';

        /*
            Action !
        */
        $str = preg_replace($pattern, $replace, $str);

        # Espacements, retours de ligne et caracères spéciaux
        $pattern = array('<br />', '    ', '    ', '&', '<', '>');
        $replace = array("\n", "\t", "\t", '&', '<', '>');
        $str = str_replace($pattern, $replace, $str);

        return strip_tags($str);
    }

Hors ligne

#36 10-04-2007 11:43:33

moustik510
Membre

Re : XHTML 2 BBcode - help me please ! :D

Rien dit ... j'ai pas vu le récapitulatif ...

Dernière modification par moustik510 (10-04-2007 11:44:46)

Hors ligne

#37 18-09-2007 13:35:57

ba2
Membre

Re : XHTML 2 BBcode - help me please ! :D

hello,
cette fonction m'interesse car je gere un site avec dotclear et les billets sont rebalancés sur mon forum punbb avec cette methode :
http://www.ps3camp.info/punbb/viewtopic.php?id=15

dans les billets j'utilise bcp le html et je voudrais que ca transforme ca en bbcode propre dans mes topics punbb. http://www.sbwu.net/
comment faire exactement ? ou placer cette fonction ?
car j'ai tres peu de connaissances en php
merci beaucoup!

Hors ligne

#38 18-09-2007 14:02:53

yemgi
Expatrié

Re : XHTML 2 BBcode - help me please ! :D

peut-etre qu'en installant simplement la mod Allow HTML ca devrait résoudre ton probleme

Hors ligne

#39 18-09-2007 14:39:16

ba2
Membre

Re : XHTML 2 BBcode - help me please ! :D

c'est ce que j'ai... mais quand tu reponds etc... le code s'affiche hmm

Hors ligne

Pied de page des forums