Formater une chaine venant de la BDD

cs_8livier Messages postés 13 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 9 mai 2009 - 14 févr. 2006 à 13:59
cs_8livier Messages postés 13 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 9 mai 2009 - 14 févr. 2006 à 16:12
bonjour,

je souhaiterais formater une chaine de caracteres venant de la base de données. En fait dans ma BDD, j'ai des textes en html avec des codes sources, le pb, comme vous pouvez l'imaginer c'est quand je fais echo $montexte; celui-ci est interprété et non affiché. J'ai donc mis des balises
 autour des phrases qui doivent etre affichées et non interprétées, et ensuite sur ma page:


preg_match_all("#
(.*?)
#s",$contenu['Texte'],$out,PREG_SET_ORDER);
$nb_de_balise=substr_count($contenu['Texte'],"<code>");
for($i=0;$i<$nb_de_balise;$i++){
$patern=$out[0][$i];
$replace=htmlentities($out[0][$i]);
echo ereg_replace($patern,$replace,$contenu['Texte']);
}

mais en fait je ne sais pas trop comment faire pour que cal marche, car pour le moment ce n'est pas le cas...
alors comment faire?
dans les pages de ce site, comment faites-vous?

3 réponses

supergyver Messages postés 29 Date d'inscription jeudi 19 février 2004 Statut Membre Dernière intervention 14 février 2007
14 févr. 2006 à 15:05
Ca m'a l'air bien compliqué ton histoire...

Tu as du code HTML et PHP dans un champ de ta table (stocké dans $contenu['Texte'] si j'ai bien compris).



Si tu fais

<?

eval( $contenu['Texte']);

?>

Ca va interprété ton code PHP.

Si tu veux faire de l'affichage, tu peux faire:



<?

echo eval( $contenu['Texte']);

?>



A moins que je n'ai pas bien saisi le problème
0
cs_8livier Messages postés 13 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 9 mai 2009
14 févr. 2006 à 15:23
oui c vrai que c'est un peu compliqué, alors une autre explication:

j'ai un texte style:

pour utiliser la fonction echo:
<?php 
echo "toto";
?>


ou encore:
<?php
echo"toto";
?>


ce texte est dans ma BDD, et quand je vais le chercher il est donc dans $montexte,
je souhaiterais pouvoir decouper le texte de façon à:
pour utiliser la fonction echo: soit bien interprété en html,
et que ce qui es trouve entre les balises code ne soit pas interprété du tout..juste que ca s'affiche...

est ce plus clair?
0
cs_8livier Messages postés 13 Date d'inscription mardi 10 mai 2005 Statut Membre Dernière intervention 9 mai 2009
14 févr. 2006 à 16:12
bon en fait je me suis inspiré du bbcode:

function bbcode_lien2($url) {
if ( preg_match('`^http://`', $url[1]) ) {
return '['.$url[1].' '.$url[2].']';
}
else {
return '['. $url[2] .'';
}
}
function bbcode_code($code) {
return $code[1];
}
function bbcode_com($com) {
return "//".$com[1]."";
}
function bbcode_paragraphe($para) {
return "".$para[1]."

";
}

function creer_bbcode ($string) {
$string = htmlentities ($string);
$string = nl2br($string);
$string = preg_replace_callback("/\[lien=(.*?)\](.*?)\[\/lien\]/is",'bbcode_lien2', $string);
$string = preg_replace_callback("/\[lien\](.*?)\[\/lien\]/is",'bbcode_lien', $string);
$string = preg_replace_callback("/\[code\](.*?)\[\/code\]/is",'bbcode_code', $string);
$string = preg_replace_callback("/\[com\](.*?)\[\/com\]/is",'bbcode_com', $string);
$string = preg_replace_callback("/\[p\](.*?)\[\/p\]/is",'bbcode_paragraphe', $string);
$string = preg_replace("(\[b\](.+?)\[\/b])is",'$1', $string);

return ($string);
}

et maintenant ca marche, quand j'ai besoin de traiter ma variable, je fais simplement:
echo creer_bbcode($variable);
0
Rejoignez-nous