Le problème c'est que la fonction htmlentities($str) remplace TOUS les caractères risquant de poser problème en html (<,>, é, à, ...) et comme tu l'appelles sur toute ta chaîne de caractère, elle va être entièrement modifiée...
Tu crois pas qu'un
str_replace serait plus utile ?
Bon, c'est vrai qu'après c'est pas évident pour trouver les url, mais c'est faisable, à la limite avec des substrings....
En tous cas amuse-toi bien, j'édite si je trouve une meilleure idée...
EDIT : voilà une idée à étudier :
Faire un preg_replace() sans appeler ton htmlentities, celui là tu le feras dans la boucle uniquement en cas de code :
Code:
case 'code' :
return '<div class="code"><pre>'.htmlentities($m[2]).'</pre></div>';
break;
Comme ça ben les balises html du code seront visibles et pas interprétées, les autres modifieront la mise en page.
Sinon ben tu t'amuses avec des str_replace... Mais en fait c'est pas pratique...