Bonjour
Je suis en train de développer un outil qui est ni plus ni moins qu'un wysiwyg simplifié.
Plutôt que d'utiliser des standards tels que TinyMCE et ce, pour des raisons de propriété intellectuelle et autres "joies" législatives, j'ai préféré développer cet outil moi-même...
Tout fonctionne très bien (Bold, Italic, Underline, link...) quand la saisie du texte se fait directement dans mon outil. Là où ça se complique, c'est quand l'utilisateur a déjà rédigé son texte sur Word et qu'il fait un copier-coller dans mon outil ou qu'il cherche à faire un copier-coller d'un texte contenu dans un fichier PDF.
Dans ce cas de figure, au moment de l'enregistrement dans la base de données, il y a un bug et l'enregistrement se fait soit partiellement (une partie du texte), soit pas du tout ! Et pour couronner le tout, parfois, l'enregistrement se fait correctement.
Voici un peu de code pour comprendre...
Formulaire HTML (qui n'a pas la forme d'un formulaire...)
La saisie du texte ou le copier-coller se fait dans un DIV ContentEditable.
<div id="texte" contentEditable></div>
Javascript pour la mise en forme (déclenché par un onClick)
document.execCommand('bold', false);
Javascript pour récupération du texte à enregistrer
1 2 3
| var texte = document.getElementById("texte").innerHTML;
texte = encodeURIComponent(texte);
var parametres = "chaine="+texte+"&id=2"; |
Ensuite, je fais passer ce contenu à un script PHP via Ajax avec la méthode POST dont voici une portion du code
1 2 3 4 5
| objetXHR = creationXHR();
objetXHR.onreadystatechange = traitementSave;
objetXHR.open("post","saveTexte.php",true);
objetXHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
objetXHR.send(parametres); |
Enfin, j'effectue l'enregistrement dans ma base SQL via PHP de cette manière
1 2 3
| $texte = $_POST['texte'];
$id = $_POST['id'];
mysql_query (" UPDATE maTable SET champTexte='".$texte."' WHERE champId='".$id."' "); |
Ma théorie sur la question...
J'ai l'impression que des caractères invisibles générés par Word ou par le PDF viennent bloquer totalement ou partiellement encodeURIComponent. Ce qui expliquerait pourquoi l'enregistrement se fait soit totalement (absence des caractères invisibles dans la chaine), soit partiellement (présence de ces caractères invisibles et blocage).
Remarque...
Si ce même texte "parasité" est copié-collé dans le TEXTAREA d'un formulaire traditionnel, l'enregistrement n'est pas bloqué...
Ma question...
Existe-t-il une méthode, une instruction, un paramétrage... qui permet de supprimer ou d'encoder ces fameux caractères qui parasitent l'exécution du programme.
Merci d'avoir lu cette longue tirade jusqu'au bout
Partager