TextArea comment conserver les balises < et &gt

Résolu
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   -  
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour, je crée actuellement un textarea qui permet au membre d'insérer du bbcode, mais lorsqu'il veut insérer une balise html ( < et > ) et bien, lors de l'affichage ça me met...rien !!
Pourtant, sur ccm, ça fonctionne : <html>, <b>...comment ça se fait ?
Alors comment conserver les balises html ?

Merci à tous,
A voir également:

12 réponses

Utilisateur anonyme
 
en php, regarde les fonctions: html_entities(), html_special_chars(), et strip_tags().

Une des trois devrait faire l'affaire je crois. Par contre je sais pas si j'ai mis les _ aux bons endroits dans les noms ds fonctions...
0
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   65
 
Tout d'abord merci de ta réponse, mais j'ai essayé les trois sans résultat. Même avec les 3 en même temps. :(
Si tu veux l'intégralité du code :
function cur($matches) {
$geshi = new GeSHi($matches[3], $matches[1]);
return '<div class="titcode">'.$matches[2].'</div><div class="code">'.htmlentities(htmlspecialchars(strip_tags($geshi->parse_code()))).'
';
}
function make($chaine)
{
$chaine = stripcslashes(html_entity_decode($chaine));
$chaine = preg_replace('/\<bold\>(.+?)\<\/bold\>/', '<strong>$1</strong>', $chaine);
$chaine = preg_replace('/\<italic\>(.+?)\<\/italic\>/', '<em>$1</em>', $chaine);
$chaine = preg_replace('/\<under\>(.+?)\<\/under\>/', '<u>$1</u>', $chaine);
$chaine = preg_replace('/\<image\>(.+?)\<\/image\>/', '<img src="$1" />', $chaine);
$chaine = preg_replace('/\<url\>(.+?)\<\/url\>/', '<a href="$1">$1</a>', $chaine);
$chaine = preg_replace('/\<title1\>(.+?)\<\/title1\>/', '<p class="title1">$1</p>', $chaine);
$chaine = preg_replace('/\<title2\>(.+?)\<\/title2\>/', '<p class="title2">$1</p>', $chaine);
$chaine = preg_replace('/\<title3\>(.+?)\<\/title3\>/', '<p class="title3">$1</p>', $chaine);
$chaine = preg_replace('/\<left\>(.+?)\<\/left\>/', '<div align="left">$1</div>', $chaine);
$chaine = preg_replace('/\<center\>(.+?)\<\/center\>/', '<div align="center">$1</div>', $chaine);
$chaine = preg_replace('/\<right\>(.+?)\<\/right\>/', '<div align="right">$1</div>', $chaine);
$chaine = preg_replace('/\<info\>(.+?)\<\/info\>/', '<div class="info">$1</div>', $chaine);
$chaine = preg_replace('/\<warn\>(.+?)\<\/warn\>/', '<div class="warn">$1</div>', $chaine);
$chaine = preg_replace('/\<idea\>(.+?)\<\/idea\>/', '<div class="idea">$1</div>', $chaine);
$chaine = preg_replace('/\<color="#(.+?)"\>(.+?)\<\/color\>/', '<font color="#$1">$2</font>', $chaine);
$chaine = preg_replace_callback('/\<code language="(.+?)" title="(.+?)"\>(.+?)\<\/code\>/', 'cur', $chaine);
$chaine = nl2br($chaine);
return($chaine);
}</code>
0
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   65
 
up
0
BartWadela Messages postés 562 Date d'inscription   Statut Membre Dernière intervention   107
 
ARF !!

j'avais un code justement pour interdire les << et >> dans les textarea

pour les autoriser je savais pas qu'il fallait une manip spéciale je croyais que c'était implicite

==
a tester :
<textarea name="NAME" id="ID" tabindex="43" class="CLASS" style="width: 300px; height: 80px;" cols="40" rows="4" wrap="virtual"></textarea>


ou alors dans ton script tu lui fais modifier < en <

a voir
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   65
 
Malheureusement ça ne marche pas...
Auriez vous une autre solution ?
0
BartWadela Messages postés 562 Date d'inscription   Statut Membre Dernière intervention   107
 
et si tu demande a ton script de convertir le symbole < en
& l t ;
// et le symbole > en
& g t ;
??

sinon a froid comme ça je vois pas trop désolé

sinon essaye de demander aux admins ou webmasters du site ou d'un autre site, si eux ont réussis, c'est qu'il y a forcément une solution
0
Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention   922
 
salut,

$var = str_replace( array( '<' , '>' ) , array( '& lt;' , '& gt;' ) , $var );

en enlevant les espaces dans les entités.
0
gryzzly Messages postés 4608 Date d'inscription   Statut Contributeur Dernière intervention   1 335
 
Ce qui donne :

$var = str_replace( array( '<' , '>' ) , array( '&lt;' , '&gt;' ) , $var );

à copier coller, sans avoir d'espaces à enlever.

(bah oui, la balise code elle soule des fois ;o) )

++
0
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   65
 
Oui, j'ai déjà pensé à ça :
function make($chaine)
{
   	$chaine = stripslashes(html_entity_decode($chaine));
	$chaine = preg_replace('/\<bold\>(.+?)\<\/bold\>/', '<strong>$1</strong>', $chaine);
	$chaine = preg_replace('/\<italic\>(.+?)\<\/italic\>/', '<em>$1</em>', $chaine);
	$chaine = preg_replace('/\<under\>(.+?)\<\/under\>/', '<u>$1</u>', $chaine);
	$chaine = preg_replace('/\<image\>(.+?)\<\/image\>/', '<img src="$1" />', $chaine);
	$chaine = preg_replace('/\<url\>(.+?)\<\/url\>/', '<a href="$1">$1</a>', $chaine);
	$chaine = preg_replace('/\<title1\>(.+?)\<\/title1\>/', '<p class="title1">$1</p>', $chaine);
	$chaine = preg_replace('/\<title2\>(.+?)\<\/title2\>/', '<p class="title2">$1</p>', $chaine);
	$chaine = preg_replace('/\<title3\>(.+?)\<\/title3\>/', '<p class="title3">$1</p>', $chaine);
	$chaine = preg_replace('/\<left\>(.+?)\<\/left\>/', '<div align="left">$1</div>', $chaine);
	$chaine = preg_replace('/\<center\>(.+?)\<\/center\>/', '<div align="center">$1</div>', $chaine);
	$chaine = preg_replace('/\<right\>(.+?)\<\/right\>/', '<div align="right">$1</div>', $chaine);
	$chaine = preg_replace('/\<info\>(.+?)\<\/info\>/', '<div class="info">$1</div>', $chaine);
	$chaine = preg_replace('/\<warn\>(.+?)\<\/warn\>/', '<div class="warn">$1</div>', $chaine);
	$chaine = preg_replace('/\<idea\>(.+?)\<\/idea\>/', '<div class="idea">$1</div>', $chaine);
	$chaine = preg_replace('/\<color="#(.+?)"\>(.+?)\<\/color\>/', '<font color="#$1">$2</font>', $chaine);
	$chaine = preg_replace_callback('/\<code language="(.+?)" title="(.+?)"\>(.+?)\<\/code\>/', 'cur', $chaine);
    $chaine = preg_replace('/\</', '<', $chaine);
    $chaine = preg_replace('/\>/', '>', $chaine);
    $chaine = nl2br($chaine);
    return($chaine);
}


Mais du coup ça affecte aussi les <image>, <url>,etc...
Merci beaucoup d'avance,
0
BartWadela Messages postés 562 Date d'inscription   Statut Membre Dernière intervention   107
 
Et en faisant l'inverse : en lui demandant de convertir les : & g t ; en > ???
0
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   65
 
Merci mais malheureusement ça ne marche pas non plus. Peut être en créant un array avec ('url','<image>'),etc...
0
Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention   922
 
tu utilises 'string_repleace()' avec un tableau contenant toutes les balises à modifier et un autre avec toutes les balises modifiées ?!
0
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   65
 
Non, c'était juste une proposition mais je ne la croit pas concrète. Avez vous autrechose, svp ?
0
BartWadela Messages postés 562 Date d'inscription   Statut Membre Dernière intervention   107
 
C' chaud ça !!!

C' la 1ere fois qu'on bloque a plusieurs sur un truc...

Et en demandant aux admins et webmasters ??
0
Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention   922 > BartWadela Messages postés 562 Date d'inscription   Statut Membre Dernière intervention  
 
salut,

ouais mais le problème est pas très clair…
se rendre compte que <image> est affecté après avoir effectué son remplacement, c'est pour le moins contradictoire ! cf. <9>
-;o)
0
Snip714 Messages postés 240 Date d'inscription   Statut Membre Dernière intervention   65
 
Tu veux dire que je devrais mettre les preg_replace de < et > avant les autres ? Ok, je test :)

EDIT : Et ça marche impec', merci
0