Les archives de FluxBB.fr
Vous n'êtes pas identifié(e).
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="[^"]*">#UDurée: 0.0014410018920898 sec. (100 %)
Motif#2 preg_match_all
#<a href=".*">#UDuré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. 
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
hey ! t'es déjà debout ?! Faut dormir dans la vie ! 
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
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="[^"]*">#UDurée: 0.0014410018920898 sec. (100 %)
Motif#2 preg_match_all
#<a href=".*">#UDuré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.
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 
Hors ligne

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 
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. 
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
Tu peux peut-être rajouter les acronym ?
Dernière modification par Domos (01-05-2009 14:42:32)
Hors ligne
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
) [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)
] :
Pattern (--> REMODIFIE <--) :
'#<object.*(?: type="[^"]*")+.*(?: data="(.*)")+[^>]*>.*<param name="(?:filename|movie|src|url|file)+" value=".*"[^/]*/>.*</object>#Us',Replace :
'[media]$1[/media]',
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.
[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>#sDurée: 0.0024778842926025 sec. (100 %)
Motif#2 preg_match_all
#<strong[^>]*>(.*?)</strong>#sDurée: 0.0035021305084229 sec. (141 %)

EDIT : --> PATTERN MEDIA REMODIFIE <--
Dernière modification par nicolas2k10 (26-08-2006 20:40:29)
Hors ligne
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 
Hors ligne
Ouép (et ça m'exerce lol) 
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
ah oui éventuellement c'est pas bète
Hors ligne
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
Rien dit ... j'ai pas vu le récapitulatif ...
Dernière modification par moustik510 (10-04-2007 11:44:46)
Hors ligne
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
peut-etre qu'en installant simplement la mod Allow HTML ca devrait résoudre ton probleme
Hors ligne
c'est ce que j'ai... mais quand tu reponds etc... le code s'affiche 
Hors ligne