Bonjour.

Je cherche à enregistrer une chaine de caractères contenue dans un DIV contenteditable dans une base SQL. Cela fonctionne correctement sauf quand cette chaine comporte les caractères ">", "<" et "&".

Voici une portion de mon code html :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
     <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
          etc...
     </head>
 
     <body>
          <input type="image" onclick="save();" src="./image/save.png" />
          <div id="texte" contentEditable ></div>
          etc...
     </body>
</html>
Voici mon code JAVASCRIPT qui correspond à la fonction "save();" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// reponse XHR et affichage du contenu du Div
function traitementSave() {
    if(objetXHR50.readyState==4) {
        if(objetXHR50.status==200) {
            alert ("Sauvegarde OK");
        }
    }
}
 
// lien avec le fichier PHP
function save() {
    var texte = document.getElementById("texte").innerHTML;
    var parametres = "texte="+texte;
    objetXHR50 = creationXHR();
    objetXHR50.onreadystatechange = traitementSave;
    objetXHR50.open("post","./save.php",true);
    objetXHR50.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    objetXHR50.send(parametres);
}
Voici une portion de mon code PHP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$texte = $_POST['texte'];
mysql_query (" INSERT INTO maTable (texte) VALUES ('$texte') ");
Donc, comme je le disais, si je saisie "Tout va bien dans le meilleur des mondes !", l'enregistrement s'effectue correctement dans ma base de donnée.

Si je saisie "Le chiffre 7 > 3", l'enregistrement retourné est "Le chiffre 7".

Pour mon code PHP, j'ai essayé ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
$texte = htmlspecialchars($_POST['texte']);
mysql_query (" INSERT INTO maTable (texte) VALUES ('$texte') ");
Mais malheureusement, l'enregistrement dans la base est bloqué au caractère ">".

Dernières précisions :
- Grâce à la commande "execCommande", j'insère du style dans mon DIV (exemple : <span style="font-weight: bold;">mon texte</span>) et ça fonctionne.
- J'ai essayé de créer un bouton permettant d'insérer le code ASCII ou le code HTML du caractère "&" et ainsi obtenir (exemple : mon texte &amp; un autre texte) ou (exemple : mon texte &#38; un autre texte)

Ceci n'a pas réglé mon problème...

Quelqu'un peut-il m'aider svp ?