IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Des caractères invisibles qui bloquent un enregistrement


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Inscrit en
    Septembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2007
    Messages : 41
    Par défaut Des caractères invisibles qui bloquent un enregistrement
    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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="texte" contentEditable></div>
    Javascript pour la mise en forme (déclenché par un onClick)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.execCommand('bold', false);
    Javascript pour récupération du texte à enregistrer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    La première chose à faire avant de vouloir remplacer ces éventuels caractères parasites est de les démasquer ...
    Une fois que tu les auras listés tu pourras sans doute les remplacer au moyen d'une expression régulière.


    Sinon il y aurait une solution plus rapide ...
    http://www.unverse.net/whizzywig-cro...ml-editor.html
    ou
    http://openwebware.com/

    ça t'évites les
    raisons de propriété intellectuelle et autres "joies" législatives
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre averti
    Homme Profil pro
    Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Inscrit en
    Septembre 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Infographiste, webdevelopper, consultant en communication, bidouilleur sur Macintosh
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2007
    Messages : 41
    Par défaut
    Identifier les caractères parasites n'est pas une chose aisée. J'ai bien essayé en isolant caractère par caractère la chaine qui bloquait l'enregistrement. Le seul soucis est que la plupart du temps, il s'agit d'un simple espace.

    Je suppose que ce "simple espace" a en fait, un encodage particulier mais impossible de l'identifier... En résumé, ce n'est pas gagné.

    En ce qui concerne tes liens, je te remercie. En effet, c'est une solution simple et rapide qui évite tout problème de droits. Mais, cela m'enlève le plaisir de construire de toutes pièces, un outil web

    Je vais donc continuer à chercher une solution fiable... Et puis, à terme, cela pourra servir à la collectivité du forum, on ne sait jamais...

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    un simple espace ?
    tu testes avec un charCodeAt() ??
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Me semble pourtant pas très compliqué de faire un try/catch autour de encodeURIComponent et d'afficher le message d'erreur en cas de catch, ou d'afficher le résultat de l'encodage si pas d'erreur.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    Citation Envoyé par grafistolage Voir le message
    Bonjour
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $texte = $_POST['texte'];
    $id = $_POST['id'];
    mysql_query (" UPDATE maTable SET champTexte='".$texte."' WHERE champId='".$id."' ");
    ...
    La première chose à faire est lire la FAQ php

    ON NE FAIT JAMAIS un update de la sorte c'est à coup sur une soure de problème.

    Un tu t'expose à une injection de code et deux tout contenu foireux de text te plante l'exécussion

    une petite démo de ce qu'il t'arrive

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $texte = "a'; DELETE FROM maTable;  UPDATE maTable SET champTexte='";
    $id = $_POST['id'];
    mysql_query (" UPDATE maTable SET champTexte='".$texte."' WHERE champId='".$id."' ");
    si tu fait ça (I.E. l'utilisateur t'envoi ça) mysql exécute un update de toute la table et met a dans tous les enregistrement puis il vide la table et fait un update sur l'enregistrement $id qui n'existe plus et donc ne fait rien

    dans le forum php il y a toutes les info pour se prémunir de cela
    de toute gaçon quelque soit le langage on n'envois JAMAIS au moteur sql une chaie à interprété qui est même partiellement issue de l'utilisateur
    A+JYT

Discussions similaires

  1. Comment supprimer des caractères invisibles
    Par rigol'man dans le forum Développement Sharepoint
    Réponses: 5
    Dernier message: 08/10/2013, 15h29
  2. Enregistrement des caractères accentués
    Par dolf13 dans le forum Administration
    Réponses: 2
    Dernier message: 06/11/2007, 23h46
  3. [Problème] Enregistrement des caractères "é" etc.
    Par devoc dans le forum Administration
    Réponses: 4
    Dernier message: 18/04/2007, 19h08
  4. Réponses: 10
    Dernier message: 06/02/2007, 15h25
  5. Fonction qui remplace des caractères spéciaux
    Par ViRouF dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 07/08/2006, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo