Rechercher : dans
Par :

TextArea comment conserver les balises < et >

Dernière réponse le 12 avr 2008 à 11:26:22 Snip714, le 7 avr 2008 à 20:16:13 
 Signaler ce message aux modérateurs

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,

Configuration: Mac OS X
Firefox 2.0.0.13

1

neo1012, le 7 avr 2008 à 20:40:36

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

Répondre à neo1012

2

Snip714, le 7 avr 2008 à 20:54:39

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>

Répondre à Snip714

3

Snip714, le 8 avr 2008 à 04:30:37

Up

Répondre à Snip714

4

BartWadela, le 8 avr 2008 à 12:51:51

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 Essayez d'être le plus clair possible dans la description de vos problèmes, qu'on puisse vous répondre presque du 1er coup.

Merci

Répondre à BartWadela

5

Snip714, le 9 avr 2008 à 14:29:44

Malheureusement ça ne marche pas...
Auriez vous une autre solution ?

Répondre à Snip714

6

BartWadela, le 9 avr 2008 à 15:01:17

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

Répondre à BartWadela

7

Dalida, le 9 avr 2008 à 15:15:12

Salut,

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

en enlevant les espaces dans les entités.
[ Mathieu ]
Le travail est un trésor. Le travail des autres, cela va de soi.
Henri Jeanson

Répondre à Dalida

8

gryzzly, le 9 avr 2008 à 15:26:24

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

++ .Moi. Et pi c'est tout !

Répondre à gryzzly

9

Snip714, le 9 avr 2008 à 16:17:00

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,

Répondre à Snip714

10

BartWadela, le 9 avr 2008 à 18:58:50

Et en faisant l'inverse : en lui demandant de convertir les : & g t ; en > ???

Répondre à BartWadela

11

Snip714, le 9 avr 2008 à 20:21:41

Merci mais malheureusement ça ne marche pas non plus. Peut être en créant un array avec ('url','<image>'),etc...

Répondre à Snip714

12

Dalida, le 9 avr 2008 à 20:33:55

Tu utilises 'string_repleace()' avec un tableau contenant toutes les balises à modifier et un autre avec toutes les balises modifiées ?!
[ Mathieu ]

Le travail est un trésor. Le travail des autres, cela va de soi.
Henri Jeanson

Répondre à Dalida

13

Snip714, le 9 avr 2008 à 21:47:30

Non, c'était juste une proposition mais je ne la croit pas concrète. Avez vous autrechose, svp ?

Répondre à Snip714

14

BartWadela, le 11 avr 2008 à 12:44:50

C' chaud ça !!!

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

Et en demandant aux admins et webmasters ??

Répondre à BartWadela

15

Dalida, le 11 avr 2008 à 12:59:11

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)
[ Mathieu ]

Le travail est un trésor. Le travail des autres, cela va de soi.
Henri Jeanson

Répondre à Dalida

16

 Snip714, le 12 avr 2008 à 11:26:22

Tu veux dire que je devrais mettre les preg_replace de < et > avant les autres ? Ok, je test :)

EDIT : Et ça marche impec', merci

Répondre à Snip714