Communauté Informatique NDFR.net

Communauté Informatique NDFR.net (http://www.ndfr.net/forums/index.php)
-   Programmation Web (HTML, PHP, ASP, Java, XML, etc.) (http://www.ndfr.net/forums/forumdisplay.php?f=65)
-   -   bbcode (http://www.ndfr.net/forums/showthread.php?t=5066)

os2 15-09-2004 04:51

bbcode
 
salut

je tente de faire parser du texte qu'un usager à entrer avant de l'insérer dans la bd...

Code:

$str = $_POST["texttutoriel"];
$str = preg_replace_callback('`<(code|url|img)>(.+?)</\1>`si', 'bbcode', htmlentities($str));

ensuite ma fonction bbcode

Code:

function bbcode($m) {
    switch($m[1]) {
        // balise        case 'code' :
          return '<div class="code"><pre>'.$m[2].'</pre></div>';
        break;
        // balise <url>
        case 'url' :
          if (preg_match ('`^http://`', $m[2]))
            return '<a href="'.$m[2].'" class="machin">'.$m[2].'</a>';
          else
            return '<a href="http://'.$m[2].'" class="machin">'.$m[2].'</a>';
        break;
        // balsie <img>
        case 'img' :
        return '<img src="'.$m[2].'" alt="mon image"/>';
    }
}

avec ce code je remplace certain tag....

le problème est que tout ce que contient $_POST["texttutoriel"] est convertit... ce qui devrait pas être le cas

si ça fonctionnerais, ça résoudrait mon problème d'une certain façon... ainsi l'usager n'aurait pas besoin de faire le travail lui même

Benjy 15-09-2004 07:50

Quote:

Originally Posted by os2
le problème est que tout ce que contient $_POST["texttutoriel"] est convertit... ce qui devrait pas être le cas

si ça fonctionnerais, ça résoudrait mon problème d'une certain façon... ainsi l'usager n'aurait pas besoin de faire le travail lui même

Moi y'en a pas comprendre quoi toi y'en a vouloir...

os2 15-09-2004 12:19

Quote:

Originally Posted by Benjy
Moi y'en a pas comprendre quoi toi y'en a vouloir...

tu parles et écrit en francais?



le texte entré par l'usager donc $_POST["texttutoriel"]; qui est mis dans str....

contient n'importe quoi....
par exemple:

<h1>il fait froid</h1>,
<code>
allo
</code>

après passage dans la fonction, tout est convertit en caractère xhtml....

on aurait donc...

&lt;il fait froid&gt;....

ce que je désire pas...

je veux juste remplacer que les balises que j'ai spécifié

Spycam 15-09-2004 14:10

Ouch.
J'aurais plutot recherché où sont les balises <code> </code> etc, puis traduit son contenu.
Parce que là çà va être galère pour que les deux fonctions se parlent.

Benjy 15-09-2004 14:27

Quote:

Originally Posted by os2
tu parles et écrit en francais?

Mieux que certains, mais ton premier message était tellement clair...
Quote:

Originally Posted by Spycam
Ouch.
J'aurais plutot recherché où sont les balises <code> </code> etc, puis traduit son contenu.
Parce que là çà va être galère pour que les deux fonctions se parlent.

Et puis généralement on utilise des crochets, justement pour que ce soit plus facile à détecter...
Mais bon je dis ça, je dis rien (© Cougar).

fonji 15-09-2004 14:38

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...


All times are GMT +2. The time now is 16:29.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.