Salut à tous,
J'ai été confronté à un problème similaire que celui qui nous fait tant souffrir sur ce forum
, le mélange du code et bbcode. Ou comment enlever le bbcode des balises codes.
Il faut avouer que c'est un probléme coriace!
J'ai trouvé une solution et je me demandais ce que vous en pensez, pour pourquoi pas l'améliorer ensemble et finalement l'implémenter sur le forum.
L'idée c'est de mémoriser les éléments code du texte pour les réinjecter à la fin. Pour savoir ou les réinjecter on crée des hash md5, ça parait compliqué mais j'ai pas trouvé mieux!
la fonction md5_code :
Modifié par matmat (21 Nov 2008 - 03:37)
J'ai été confronté à un problème similaire que celui qui nous fait tant souffrir sur ce forum

Il faut avouer que c'est un probléme coriace!
J'ai trouvé une solution et je me demandais ce que vous en pensez, pour pourquoi pas l'améliorer ensemble et finalement l'implémenter sur le forum.
L'idée c'est de mémoriser les éléments code du texte pour les réinjecter à la fin. Pour savoir ou les réinjecter on crée des hash md5, ça parait compliqué mais j'ai pas trouvé mieux!
$code_pattern = '/\[code\](.*?)\[\/code\]/is';
//on memorise toute les balise code dans un tableau et on les remplace par [hash]
if(preg_match_all($code_pattern,$text,$match_codes)){
foreach($match_codes[1] as $code){
//mise en forme du code selon les gouts
$code_content = preg_replace ('/^\s*/is', '', $code);
$code_content = preg_replace ('`\s([^\/])`is', ' $1', $code_content);
$code_content = '<div class="code">'.$code_content.'</div>';
//on stocke dans un tableau
$codes[md5($code)] = nl2br($code_content);
}
//on remplace par le hash
$text = preg_replace_callback($code_pattern,'md5_code',$text);
}
//ici tout le code bbcode gras italique smiley...
//on reinjecte le code
if(isset($match_codes[1])){
foreach($match_codes[1] as $code){
$md5_index = md5($code);
$text = preg_replace('/\['.$md5_index.'\]\s*(<br\s?\/>)?/is',$codes[$md5_index],$text);
}
}
la fonction md5_code :
function md5_code($masque){
return "[".md5($masque[1])."]";
}
Modifié par matmat (21 Nov 2008 - 03:37)