S'abonner :  Newsletters    Magazines
Avis sur les produits Avis sur les logiciels Avis sur les jeux Actualités A propos de 01net
538 utilisateurs connectés

pas d'html entre [code] et [/code] avec les regex

Beno@ le 02 octobre 2005 à 12h43
salut

j'ai fait un systeme de BBcode avec preg_replace et les regex mais je n'arrive pas a desactiver le html entre [code] et [/code] :/

vous savez comment faire?

mon code:
code:

$replace_base=array('!\[b\](.+?)\[/b\]!is',
'!\[s\](.+?)\[/s\]!is',
'!\[i\](.+?)\[/i\]!is',
'!\[url=(.+?)\](.+)\[/url\]!is',
'!\[img\](.+?)\[/img\]!is',
'!\[quote\](.+?)\[/quote\]!is',
'!\[color=(.+?)\](.+?)\[/color\]!is',
'!\[code\](.+?)\[/code\]!is');

$replace_finish=array('<strong> $1 </strong>',
'<span style="text-decoration:underline;"> $1 </span>',
'<em> $1 </em>',
'<a href="$1" onclick="window.open(this.href); return false;"> $2 </a>',
'<img src="$1" alt="$1" />',
'<p class="quote"><strong>citation:</strong><br/>$1</p>',
'<span style="color: $1">$2</span>',
'<p class="quote"><strong>code</strong>:<br/>$1</p>');



$truc=nl2br(preg_replace($replace_base, $replace_finish, htmlentities($var, ENT_QUOTES)));
?>
GuiGui312 le 02 octobre 2005 à 14h12
Je crois que les balises <noformat> desactive l'html qui est entre il me semble
Beno@ le 02 octobre 2005 à 16h20
ha je vais voir ;)
Beno@ le 02 octobre 2005 à 16h23
euh non en fait ca marche pas :/
GuiGui312 le 02 octobre 2005 à 16h42
Ah ^^
Martius le 02 octobre 2005 à 21h12
<pre></pre> : bloc
<code></code> : inline

Tu auras biensûr utilisé html_entities() avant.
Beno@ le 03 octobre 2005 à 17h58
euh bah nan justement le truc c'est que je laisse le choix a l'admin de desactiver ou non le html mais je voudrait qu'il soit desactivé entre les [code] :/

c'ets justement ca qui pose probleme

je pensait si dans les regex au lieu de mettre '<code>$1</code>' on pouvait mettre des focntions php je mettrait '<code>htmlentities($1, ENT_QUOTES)</code'
mais ca marche pas :(
Martius le 06 octobre 2005 à 11h59
Tu peux :
preg_replace('`\[code\](.+)\[/code\]`e','<code>htmlentities($1,ENT_QUOTES)</code>',$expression);
(à tester)

e :
Avec cette option, preg_replace effectue la substitution normale des références arrières dans la chaîne de remplacement, puis l'évalue comme un code PHP, et utilise le résultat pour remplacer la chaîne de recherche.
Seule preg_replace utilise cette option. Elle est ignorée par les autres.
http://www.expreg.com/options.php
Beno@ le 06 octobre 2005 à 18h18
ha donc il faut mettre l'option e?
Beno@ le 06 octobre 2005 à 18h22
euh en fait ca amrche pas :/
Martius le 06 octobre 2005 à 20h58
et :
preg_replace('`\[code\](.+)\[/code\]`e','<code>'.htmlentities('$1',ENT_QUOTES).'</code>',$expression);

(edit, j'avais fait une belle connerie plus haut, normal que ça marche pas)
-->Message édité par Martius le 06/10/2005 21:01:04<--
Beno@ le 07 octobre 2005 à 18h18
marche toujours pas :pleure:
Martius le 08 octobre 2005 à 13h56
ou bien : preg_replace('`\[code\](.+)\[/code\]`e','<code>'.htmlentities('\\1',ENT_QUOTES).'</code>',$expression);
:D

Mais c'est autour de ça, j'en suis sûr...
Beno@ le 09 octobre 2005 à 10h13
ca ne marche pas j'en desepere
Martius le 09 octobre 2005 à 11h06
Doc PHP :
Exemple 5. Utilisation de l'option 'e'
<?php
preg_replace("/(<\/?)(\w+)([^>]*>)/e",
"'\\1'.strtoupper('\\2').'\\3'",
$html_body);
?>

Cela va mettre en majuscule toutes les balises HTML du texte.
Beno@ le 09 octobre 2005 à 11h31
ha merci ej vais voir ca ;)
Beno@ le 09 octobre 2005 à 12h05
ca marche mais il me reste un truc qui m'embete...

j'ai fait:

echo preg_replace('!<b>(.+)</b>!e','htmlentities(\'\\0\', ENT_QUOTES)', $str);

mais c'ets possible de mettre une balise <em> entournat le code remplacé?

j'ai tout essayé mais j'y arrive pas :( ..
je voudrais un truc dans le genre:

echo preg_replace('!<b>(.+)</b>!e','<em>'htmlentities(\'\\0\', ENT_QUOTES)'</em>', $str);
-->Message édité par Beno@ le 09/10/2005 12:06:57<--
Martius le 09 octobre 2005 à 18h32
echo '<em>'.preg_replace('!<b>(.+)</b>!e',htmlentities(\'\\0\', ENT_QUOTES), $str).'</em>';

Edit : non c'est pas ça, attends
-->Message édité par Martius le 09/10/2005 18:34:08<--
Martius le 09 octobre 2005 à 18h38
preg_replace_callback
(PHP 4 >= 4.0.5, PHP 5)
preg_replace_callback -- Rechercher/remplacer avec une expression rationnelle et fonction de callback
Description
mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit [, int &count]] )

Le comportement de preg_replace_callback() est presque identique à celui de preg_replace(), hormis le fait qu'à la place du paramètre replacement, il faut spécifier une fonction de callback callback qui sera appelée, avec les éléments trouvés en arguments. Cette fonction retourne alors la chaîne de remplacement.

$str = preg_replace_callback(
___'`<b>(.+)</b>`',
___create_function(
______// Les guillemets simples sont très importants ici
______// ou bien il faut protéger les caractères $ avec \$
______'$matches',
______'return "<em>".htmlentities($matches[0])."</em>";'
______),
___$str
___);
-->Message édité par Martius le 09/10/2005 18:54:33<--


PRODUITS

TÉLÉCHARGER - LOGICIELS

JEUX VIDÉOS

LOISIRS

01NET PRO

AVIS ET COMMENTAIRES

A PROPOS DE 01NET

publicité
> Logiciel : Movavi VideoSuite
Un programme simple de création et d'édition vidéo.

01Informatique
01 INFORMATIQUE
L'hebdo de référence des décideurs informatiques.
Micro Hebdo
MICRO HEBDO
L'hebdo qui vous simplifie la micro
et Internet.
L'Ordinateur Individuel
L'ORDINATEUR INDIVIDUEL
Le mensuel informatique qui vous informe et vous conseille.
Nous contacter  |  Charte de confiance  |  Voir notice légale

01net.  -  01men  -  RMC  -  BFM Radio  -  BFM TV  -  La Tribune  -  TousLesPodcasts  -  01informatique.fr  -  Association RMC-BFM
Tous droits réservés © 1999 - 2009 Internext - 01net.