Passer du bbcode dans un script javascript

Résolu/Fermé
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 - 8 avril 2009 à 14:34
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 - 9 avril 2009 à 10:59
Bonjour,

Je vais essayer de vous présenter mon problème le plus clairement.

J'ai une page php ( liste_article_membre.php) qui affiche la liste des articles rentrés dans ma BD. Le corps du messages ai été écrit avec du bbcode. Pour pouvoir afficher le corps du messages quand on visualise l'article, je passe ma variable $texte dans une fonction bbcode pour parser. Puis je l'envoie dans une fonction JS qui m'affiche l'article dans une fenetre dynamique.

liste_article_membre.php

$id=$donnees_messages['id_page'];
$article=mysql_query("SELECT * FROM page WHERE id_page='$id'");
while ($donnees = mysql_fetch_array($article) )
{
$titre=$donnees['titre']; $texte=$donnees['commentaire'];
}

$texte=bbcode($texte);
$lien="../upload/capitaine.hadock";
$fichier="sitemap.ppx";

<input type="image" value="Fenetre" src="../img/lecture.png" onclick="creer_fenetre(200,200,600,600,'<?php echo $titre; ?>','<?php echo $texte; ?>','<?php echo $lien; ?>','<?php echo $fichier; ?>')" />

function bbcode

<?php
require("../include/config.php");

$result = mysql_query('SELECT * FROM bbcode');

while($row = mysql_fetch_array($result))
{
$text = preg_replace("$row[preg]","$row[replace]",$text);

}

$text = strtr($text,array('''=>'\''));
$text = preg_replace("#\<code=php\>(.*)\</code\>#eUi","'<div class=\'code\'>Code</div><div class=\'code2\'>'.highlight_string(html_entity_decode('$1'),true).'</div>'",$text);
$text = preg_replace("#\<code=html\>(.*)\</code\>#isU",'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>',$text);
$text = preg_replace("#\<code=c\+\+\>(.*)\</code\>#isU",'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>',$text);
$text = preg_replace("#\<code=c\>(.*)\</code\>#isU",'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>',$text);
$text = preg_replace("#\<code=javascript\>(.*)\</code\>#isU",'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>',$text);
$text = preg_replace("#\<code=vb\>(.*)\</code\>#isU",'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>',$text);
$text = preg_replace("#\<code=actionscript\>(.*)\</code\>#isU",'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>',$text);
$text = nl2br($text);
return $text;

}

?>

Mon problème je n'arrive pas à faire passer la variable text dans ma fonction créer_fenetre une fois qu'elle passe dans la fonction bbcode.
A voir également:

13 réponses

NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
8 avril 2009 à 14:53
Quand vous remplacez le texte par autre chose que ce qui sort de la fonction bbcode, ça marche?
Si non, positionnez la souris sur le bouton image et regardez dans la barre d'état en bas à gauche sur votre navigateur (là où il y a écrit "terminé" au fin de chargement des pages et où on peut voir le verrou des pages sécurisées) l'appel noté, vous verrez peut-être la faute, sinon vous pouvez aussi afficher tout simplement les différentes variables passées dans la fonction js pour savoir.
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
8 avril 2009 à 15:16
Oui quand je le remplace par autre chose cela fonctionne très bien.
lorsque que je fait l'input si je passe la variable de cette facon :

<?php $texte; ?> : rien ne s'affiche dans ma fenetre javascript
<?php echo $texte; ?> : le $texte s'affiche dans ma page liste_article_membre.php

Je comprend pas pourquoi celle la sa me l'affiche et les autres variables elles passe très bien en paramètre.
Quelqu'un aurait une idée ?:)
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
8 avril 2009 à 15:19
ah ça y est, je parie qu'il y a des " ou des ' dans ton $texte renvoyé par bbcode ?
Donc quand il essaie de l'utiliser il peut pas car la chaîne envoyée referme les " et ' n'importe où. Il faut utiliser des \ et ça devrait aller
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
8 avril 2009 à 15:25
En utilisant $text=addslashes($text); ?
Je comprend pas bien
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
8 avril 2009 à 15:32
Non addslashes c'est pour les bases de données.
Je vous explique, vous avez cette ligne :

<input type="image" value="Fenetre" src="../img/lecture.png" onclick="creer_fenetre(200,200,600,600,'<?php echo $titre; ?>','<?php echo $texte; ?>','<?php echo $lien; ?>','<?php echo $fichier; ?>')" />


imaginez que $texte contiennent un caractère "
alors le programme comprendra le " comme la fin du contenu du onclick alors que ce sera juste un élément de votre texte.
Je ne sais pas s'il y a une fonction qui permet de placer des antislash là où il faut Sinon devant tous les " et ' de votre $texte vous devrez mettre un antislash (antislash veut dire que le caractère d'après ne doit pas être considérer comme un élément spécial mais comme un simple texte)
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
8 avril 2009 à 15:55
Le problème venait bien de la. J'ai remplacer dans ma table bbcode les " par des ' pour les classes.
Maintenant il ne s'affiche plus dans la page liste_article_membre.php mais le problème c'est que la fenêtre dynamique ne s'ouvre plus quand je met <?php echo $text ?> .

A quoi cela peut être due ?
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
8 avril 2009 à 16:04
il faut pas remplacer les " par des ', ça ratera aussi car le ' entoure les chaîne de caractères que tu passes au javascript en paramètres :s
Faut vraiment utiliser les antislash
0

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

Posez votre question
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
8 avril 2009 à 16:12
Donc il faut que je remplace sa au niveau de ma table SQL bbcode.

INSERT INTO `bbcode` VALUES (1, '#\\<couleur=(.+)\\>(.+)\\<\\/couleur\\>#isU', '<span class=\'$1\'>$2</span>');
INSERT INTO `bbcode` VALUES (5, '#\\<souligne\\>(.+)\\</souligne\\>#isU', '<span class="souligne">$1</span>');
INSERT INTO `bbcode` VALUES (3, '#\\<gras\\>(.+)\\</gras\\>#isU', '<span class=\'gras\'>$1</span>');
INSERT INTO `bbcode` VALUES (4, '#\\<italique\\>(.+)\\</italique\\>#isU', '<span class="italique">$1</span>');
INSERT INTO `bbcode` VALUES (6, '#\\<barre\\>(.+)\\</barre\\>#isU', '<span class="barre">$1</span>');
INSERT INTO `bbcode` VALUES (7, '#\\<citation=(.+)\\>(.+)\\</citation\\>#isU', '<span class="citation">Citation :$1</span><div class="citation2">$2</div>');
INSERT INTO `bbcode` VALUES (8, '#\\<image\\>(.+)\\</image\\>#isU', '<img src=\'$1\' alt=\'image poster par utilisateur\' />');
INSERT INTO `bbcode` VALUES (9, '#\\<lien=(.+)\\>(.+)\\</lien\\>#isU', '<a href=\'$1\'>$2</a>');
INSERT INTO `bbcode` VALUES (10, '#\\<email=(.+)\\>(.+)\\</email\\>#isU', '<a href=\'mailto:$1\'>$2</a>');
INSERT INTO `bbcode` VALUES (11, '#\\<position=(.+)\\>(.+)\\</position\\>#isU', '<div class=\'$1\'>$2</div>');
INSERT INTO `bbcode` VALUES (12, '#\\<taille=(.+)\\>(.+)\\</taille\\>#isU', '<span class="$1">$2</span>');
INSERT INTO `bbcode` VALUES (13, '#\\<police=(.+)\\>(.+)\\</police\\>#isU', '<span class="$1">$2</span>');

Le problème certain élément du bbcode ne seront plus pris en compte à l'affichage si je met des antislash non ?
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
8 avril 2009 à 16:28
c'est pas au niveau de la base qu'il faut le faire mais entre l'appel à la fonction bbcode et l'écriture du input type="image"
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
8 avril 2009 à 16:46
J'ai réécrit dans ma fonction bbcode tout les regex pour ne plus utiliser la base de donnée. J ai mit des \ devant les ' et " , cela donne sa

$text = preg_replace("#\<email=(.+)\>(.+)\</email\>#isU","\'<a href=\'mailto:$1\'>$2</a>\'",$text);
$text = preg_replace("#\<lien=(.+)\>(.+)\</lien\>#isU","\'<a href=\'$1\'>$2</a>\'",$text);
$text = preg_replace("#\<image\>(.+)\</image\>#isU","\'<img src=\'$1\' alt=\'image poster par utilisateur\' />\'",$text);
$text = preg_replace("#\<citation=(.+)\>(.+)\</citation\>#isU","'<span class=\'citation\'>Citation :$1</span><div class=\'citation2\'>$2</div>\'",$text);
$text = preg_replace("#\<barre\>(.+)\</barre\>#isU","\'<span class=\'barre\'>$1</span>\'",$text);
$text = preg_replace("#\<italique\>(.+)\</italique\>#isU","'<span class=\'italique\'>$1</span>\'",$text);
$text = preg_replace("#\<gras\>(.+)\</gras\>#isU","\'<span class=\'gras\'>$1</span>\'",$text);
$text = preg_replace("#\<souligne\>(.+)\</souligne\>#isU","\'<span class=\'souligne\'>$1</span>\'",$text);
$text = preg_replace("#\<couleur=(.+)\>(.+)\<\/couleur\>#isU","\'<span class=\'$1\'>$2</span>\'",$text);
$text = preg_replace("#\<position=(.+)\>(.+)\</position\>#isU","\'<div class=\'$1\'>$2</div>\'",$text);
$text = preg_replace("#\<taille=(.+)\>(.+)\</taille\>#isU","\'<span class=\'$1\'>$2</span>\'",$text);
$text = preg_replace("#\<police=(.+)\>(.+)\</police\>#isU","\'<span class=\'$1\'>$2</span>\'",$text);

La la fenêtre dynamique s'ouvre bien mais le problème c'est l'affichage du corp du texte étant donné que j'ai \ les ' et " le texte s'affiche de cette facon :

'<span class='rouge'>'<span class='ttgros'>COUCOU</span>'</span>'

Il n'arrive pas à reconnaitre le css comme il y a toujours les '.
J'ai peut être fait une erreur dans ce que tu m'as dit.
En tout cas merci pour m'aider dans ce problème.
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
8 avril 2009 à 16:59
Il y a des onequote (') en trop :

exemple :
$text = preg_replace("#\<police=(.+)\>(.+)\</police\>#isU","\'<span class=\'$1\'>$2</span>\'",$text);
devient
$text = preg_replace("#\<police=(.+)\>(.+)\</police\>#isU","<span class=\'$1\'>$2</span>",$text);

:)
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
8 avril 2009 à 17:20
Les changement on été éffectués , j obtiens maintenant <span class='rouge'>couleur</span>
C'est toujours une erreur avec les regex ou sa vient de mon code JS.

un extrait du code :

function creer_fenetre(left,top,width,height,titre,texte,lien,fichier) {

alert(titre);
alert(texte);

//ON CREER LE MILIEU DE LA FENETRE
var milieu = document.createElement("div");
milieu.className="milieu";
var milieu_gauche = document.createElement("div");
milieu_gauche.className="milieu_gauche";
var milieu_droite = document.createElement("div");
milieu_droite.className="milieu_droite";
var milieu_centre = document.createElement("div");
milieu_centre.className="milieu_centre";
var milieu_centre_titre = document.createElement("div");
milieu_centre_titre.className="milieu_centre_titre";
var milieu_centre_commentaire = document.createElement("div");
milieu_centre_commentaire.className="milieu_centre_commentaire";
var milieu_centre_upload = document.createElement("div");
milieu_centre_upload.className="milieu_centre_upload";
var milieu_centre_fermer = document.createElement("div");
milieu_centre_fermer.className="milieu_centre_fermer";

//Création des div pour l'affichage de l'article ( sujet, corps, partage fichier, et bouton pour fermer)
milieu_centre.appendChild(milieu_centre_titre);
milieu_centre.appendChild(milieu_centre_commentaire);
milieu_centre.appendChild(milieu_centre_upload);
milieu_centre.appendChild(milieu_centre_fermer);

var titre_legend_corps = document.createTextNode("Corps");
var titre_legend_upload = document.createTextNode("Fichier joins");

//Création de la legend pour la mise en page du corps du texte
var legend_commentaire = document.createElement("legend");
legend_commentaire.className="legend_commentaire";

//Création du fieldset pour la mise en page du corps du texte
var contour_commentaire = document.createElement("fieldset");
contour_commentaire.className="contour_commentaire";

//Création de la legend pour la mise en page de l'upload
var legend_upload = document.createElement("legend");
legend_upload.className="legend_upload";

//Création du fieldset pour la mise en page de l'upload
var contour_upload = document.createElement("fieldset");
contour_upload.className="contour_upload";


var titre = document.createTextNode(titre);
var corps = document.createTextNode(texte); <<<<<---- Affichage de mon fameux texte

De plus je fait appel à bbcode.css dans ma page liste_article_membre.php
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
8 avril 2009 à 17:22
Pourriez-vous afficher votre texte à la sortie de la fonction bbcode, pour que je voies, merci
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
8 avril 2009 à 17:36
Il y a le bbcode du lien et de l'email qui fonctionne le reste affiche juste le mot rentrer en paramètre.
Cet affichage est fait dans la page liste_article_membre.php

Exemple :

dans la fenetre JS =>> <span class='souligne'>souligne</span>
dans la page php =>> souligne

dans la fenetre JS =>> <span class='barre'>barré</span>
dans la page php =>> barre

Voila l'affichage.
Je vous redonne ma fonction actuel de bbcode si cela peut vous servir :

<?php
function bbcode($text)
{
$text = preg_replace("#\<email=(.+)\>(.+)\</email\>#isU","<a href=\"mailto:$1\">$2</a>",$text);
$text = preg_replace("#\<lien=(.+)\>(.+)\</lien\>#isU","<a href=\'$1\'>$2</a>",$text);
$text = preg_replace("#\<image\>(.+)\</image\>#isU","<img src=\'$1\' alt=\"image poster par utilisateur\" />",$text);
$text = preg_replace("#\<citation=(.+)\>(.+)\</citation\>#isU","<span class=\'citation\'>Citation :$1</span><div class=\'citation2\'>$2</div>",$text);
$text = preg_replace("#\<barre\>(.+)\</barre\>#isU","<span class=\'barre\'>$1</span>",$text);
$text = preg_replace("#\<italique\>(.+)\</italique\>#isU","<span class=\'italique\'>$1</span>",$text);
$text = preg_replace("#\<gras\>(.+)\</gras\>#isU","<span class=\'gras\'>$1</span>",$text);
$text = preg_replace("#\<souligne\>(.+)\</souligne\>#isU","<span class=\'souligne\'>$1</span>",$text);
$text = preg_replace("#\<couleur=(.+)\>(.+)\<\/couleur\>#isU","<span class=\'$1\'>$2</span>",$text);
$text = preg_replace("#\<position=(.+)\>(.+)\</position\>#isU","<div class=\'$1\'>$2</div>",$text);
$text = preg_replace("#\<taille=(.+)\>(.+)\</taille\>#isU","<span class=\'$1\'>$2</span>",$text);
$text = preg_replace("#\<police=(.+)\>(.+)\</police\>#isU","<span class=\'$1\'>$2</span>",$text);
$text = strtr($text,array('''=>'\''));
$text = preg_replace("#\<code=php\>(.*)\</code\>#eUi","\'<div class=\'code\'>Code</div><div class=\'code2\'>'.highlight_string(html_entity_decode('$1'),true).'</div>\'",$text);
$text = preg_replace("#\<code=html\>(.*)\</code\>#isU","\'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>\'",$text);
$text = preg_replace("#\<code=c\+\+\>(.*)\</code\>#isU","\'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>\'",$text);
$text = preg_replace("#\<code=c\>(.*)\</code\>#isU","\'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>\'",$text);
$text = preg_replace("#\<code=javascript\>(.*)\</code\>#isU","\'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>\'",$text);
$text = preg_replace("#\<code=vb\>(.*)\</code\>#isU","\'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>\'",$text);
$text = preg_replace("#\<code=actionscript\>(.*)\</code\>#isU","\'<div class=\'code\'>Code</div><div class=\'code2\'>$1</div>\'",$text);
$text = nl2br($text);
return $text;
}
?>

Petite absence d'1h et je suis de retour, je n'abandonne pas le POST :)
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
8 avril 2009 à 19:15
ouh je crois que je vois.
En fait textNode comme son nom l'indique c'est pour du texte, or votre texte étant du HTML il a besoin d'être interprété!
Il faut donc faire
document.createElement("div");
div.innerHTML = texte;
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
9 avril 2009 à 09:59
Merci NookZ, le problème était la.
Ca commence à prendre forme. Il y a encore quelque petite chose qui ne fonctionne pas.
J'ai l'impression que l'affichage ne prend pas en compte les retour à la ligne avec la touche entrée que j'ai fait pendant la création d'article.
Je continu de tester mes autres bbcode voir si tout passe bien.
Encore merci de ton aide NookZ
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
9 avril 2009 à 10:22
Pour les retours à la ligne il faut remplacer les caractères \n par des <br/> très certainement :)
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
9 avril 2009 à 10:34
Héhé oui c'est bon j'ai ajouté $text = preg_replace ("#(\r|\n|\r\n)#isU","<br>", $text); dans ma fonction bbcode et ca marche nickel.
Je vais commencer à m'attaquer à l'affichage de l'upload maintenant.
Merci pour ton aide.
0
NookZ Messages postés 2138 Date d'inscription jeudi 29 janvier 2009 Statut Membre Dernière intervention 7 mars 2013 513
9 avril 2009 à 10:47
par contre il faut mettre <br/> et non <br> car dans la norme toutes les balises HTML doivent être fermées :)
0
beudet Messages postés 122 Date d'inscription vendredi 19 octobre 2007 Statut Membre Dernière intervention 24 février 2011 13
9 avril 2009 à 10:59
C'est fait :) merci
0