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 :

Unterminated string literal


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut Unterminated string literal
    Bonjour,
    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try{//alert(eval("("+containP+")"));
    var jsQ=eval("("+aJ.responseText+")");//ATTENTION SI ERREUR GENRE ' PAS D'OBJET JSON MAIS STOKAGE QUAND MEME DANS LOCALSTORAGE ET GROSSE ERREUR !SE RETROUVE PLUS HAUT  
    //Si ' 1er \ Ok pour 1er evaluation json ensuite slacher le ' via js pour 2ieme eval json  [N'est pas un objet javaScript}
    }
    catch(e){
     
    alert(e.message+"=>jsQ")
    }
    C'est simplement le résultat d'une requete Ajax
    au debut j'ai eu une erreur invalid label vu que javaScript s'attend à un objet javaScript et non pas à un objet au format Json donc l'ajout de "("+ en convertissant le résultat en string a resolu le probleme
    et là donc j'ai une erreur unterminated string literal
    mon contenu est le resultat d'une requete SQL dans une base de donnée ou il doit y avoir des retours à la ligne indésirables
    Existe il une fonction PHP pour résoudre ce souci ou un formatage quelconque en javaScript merci

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    tu dois t'arranger coté serveur pour supprimer les caractères indésirables

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Style les espaces indésirables avec trim() les retours lignes ? etc

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    y'a quoi là dedans aJ.responseText ?
    fais en un console log

  5. #5
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    vu que javaScript s'attend à un objet javaScript et non pas à un objet au format Json
    Quelle est ta définition d'objet JavaScript ?
    Quelle est ta définition d'un JSON ?

    Un objet JavaScript est une entité faisant partie intégrante de JavaScript.
    Un JSON est un format plat (chaîne) permettant d'échanger de l'information entre deux langages.

    Sens JavaScript vers serveur (PHP par ex) :

    Objet JavaScript :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var membre = {
      nom: 'Eich',
      prenom: 'Brendan'
    }
    Le JSON équivalent, qui est une chaîne donc un format plat, peut être passée au serveur :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    JSON.stringify(membre); // '{"nom":"Eich","prenom":"Brendan"}'

    Côté serveur (par exemple PHP), on récupère le format JSON, et on le traduit dans une entité compréhensible du langage (stdclass/array PHP en l'occurence) :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    var_dump(json_decode('{"nom":"Eich","prenom":"Brendan"}')); 
    /* Donne l'stdclass :
    object(stdClass)#1 (2) { 
      ["nom"]=> string(4) "Eich" 
      ["prenom"]=> string(7) "Brendan" 
    }*/
     
    var_dump(json_decode('{"nom":"Eich","prenom":"Brendan"}', true)); 
    /* Donne l'array :
    array(2) { 
      ["nom"]=> string(4) "Eich" 
      ["prenom"]=> string(7) "Brendan" 
    }*/

    Sens serveur (PHP par ex) vers JavaScript :

    Côté PHP :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $membre = array("nom" => "Eich", "prenom" => "Brendan");
    var_dump(json_encode($membre)); // string(33) "{"nom":"Eich","prenom":"Brendan"}"

    On a bien une chaîne formatée correctement en JSON. Grâce à une méthode native de JavaScript, tu peux transformer le JSON en Objet JavaScript :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    JSON.parse('{"nom":"Eich","prenom":"Brendan"}'); // Object {nom: "Eich", prenom: "Brendan"}

    On est donc sûre que notre Objet JavaScript est correct. Donc, pourquoi utilises-tu eval ??

  6. #6
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    aJ.responseText => du string

    eval si JSON.parse n'est pas dispo ...

  7. #7
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Ok. M'enfin, si ça permet de clarifier quelques notions

  8. #8
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    eval si JSON.parse n'est pas dispo ...


    Un eval d'une réponse serveur sans prétraitement, c'est ouvrir la boîte de Pandore !

    Si JSON.parse n'est pas dispo --> polyfill !
    http://bestiejs.github.io/json3/

  9. #9
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Un eval d'une réponse serveur sans prétraitement, c'est ouvrir la boîte de Pandore !
    je ne vois pas ce qu'un eval pourrait faire de plus qu'une insertion de code dans la console firebug ...

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Et bien merci pour toutes ces informations
    J'ignorais l'existence de JSON.parse carrément
    En ce qui concerne un eval suite à une réponse serveur je vais tout blinder mais pour moi le plus dangereux est l'inverse : une faille XSS
    Si quelqu'un accède au code serveur c'est que via une injection SQL il aura pu injecter du code dans la base de donnée
    j'avoue que je m'inquiete pas mais merci pour le lien pour Json 3
    Sinon il y a 8 objets dans un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [{'id_page':'1','entete':'ENTETE','page':'home','titre':'titre','contenu':'','banniere':'banniere'},{'id_page':'2','entete':'ENTETE','page':'results','titre':'TITRE','contenu':'XXXXXXXX','banniere':'banniere'},ETC
    Je devrais surement utiliser les fonctions php pour créer mon tableau d'objets

  11. #11
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 060
    Points : 44 585
    Points
    44 585
    Par défaut
    Bonjour,
    à tout hasard, vérifie qu'il n'y a pas de virgule après le dernier objet de la liste.

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Pour la virgule ,j'avoue que j'ai eu le cas.Il s'agit des retours à la ligne quand j'en laisse aucun dans mon champs text dans MySQL cela fonctionne.Une chaine javaScript valide ne les supportant pas ;Je vais encapsuler mon champs :contenu et son contenu : une chaine de caractère dans un tableau
    Le truc c'est qu’effectivement avec eval j'ai un objet et ses propriétés
    mais je le stock dans localStorage
    or localStorage.setItem(clé,monObjet); va stocker une chaine de caractere "object"(2 heure la dessus j'ai passé)
    donc avec des for in etc je stocke localStorage.setItem(clé,{'champs':'valeur','champs':'valeur' etc );dynamiquement et les retour à la ligne sont donc mal vu

  13. #13
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par laurentg2003 Voir le message
    Pour la virgule ,j'avoue que j'ai eu le cas.Il s'
    Merde... il est mort en écrivant son message !

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Je suis mort de rire c'est genre "javaScript m'a tuer"(avec la jolie faute)

    Edit j'ai appuyé sur entré je pense

  15. #15
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    je ne vois pas ce qu'un eval pourrait faire de plus qu'une insertion de code dans la console firebug ...
    Le code que tu mets dans firebug ou autre outil de dev local, ça vient de toi. Tandis que le code dans un eval issu d'une requête serveur, lui, peut venir d'ailleurs. Et surtout, d'un utilisateur mal intentionné qui s'en sert pour tout et n'importe quoi : phishing, cookie traceur, keylogger... C'est un énorme risque de faire ça, surtout qu'on peut coder tout et n'importe quoi avec JavaScript, et parfois sous des formes très étranges (interpréter un mélange de tabulations et espaces, ou utiliser []+!() comme je l'ai montré dans un de mes articles)

    Il y a un slogan à retenir très simple : eval is evil

    Les cas sont très rares où eval est vraiment utile et fiable. Dans le doute, mieux ne vaut jamais l'utiliser.

  16. #16
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    or localStorage.setItem(clé,monObjet); va stocker une chaine de caractere "object"
    Oui, localstorage ne stocke que des chaines, mais rien ne t'empêche d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    localStorage.setItem(clé,JSON.stringify(monObjet));

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Merci pour ces infos
    Je vais supprimer mes eval pour Json.parse() et je ne connaissais pas stringify(monObjet) qui va énormément alléger mon code
    merci beaucoup

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Bon ça devient du PHP et vu que j'en ai pas fait depuis des lustres
    voici mon code pour supprimer les retours ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //$contenu=str_replace('CHR(13)','x',$row['CONTENU'],$count); //\n et ou \r CHR(10)CHR(13)
    ou \r\n
    j'ai tout essayé
    Par contre mon retour chariot existe bien nl2br le transforme bien en <br>
    En javaScript ça m'a l'air difficile merci pour votre aide

  19. #19
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $chaine="une
    chaine
    avec
    ds
    retours
    ligne";
     
    $chaine=preg_replace('~\r|\n~',' ',$chaine);
     
    echo nl2br($chaine);

  20. #20
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 327
    Points : 204
    Points
    204
    Par défaut
    Merci beaucoup pour ton code qui fonctionne parfaitement
    Il s'agit bien des caracteres ASCII 10 saut de ligne et 13 retour chariot
    A une époque je ne juré que par PHP et là je fais du Js inutilement c'est plus ludique
    donc j'avais fait un code comme cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(var j=0;j<aJ.responseText.length;j++){
     
    var code=aJ.responseText.charCodeAt(j);
     
    alert(code+":"+String.fromCharCode(code));//donne code 10 et 13  quand on a un vide ....
    }
     
    }
    Bien sur je vais utiliser ton code php Merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. unterminated string literal, mais je ne sais pas pourquoi
    Par job48 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/09/2010, 17h49
  2. (PHP) Erreur JS : unterminated string literal
    Par FotoXe33 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 24/03/2010, 15h16
  3. [DOM] "unterminated string literal"
    Par Crawdge dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/05/2008, 09h40
  4. "unterminated string literal" oui mais je ne vois rien
    Par lodan dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 17/02/2008, 17h52
  5. Unterminated string literal
    Par zalalus dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/12/2006, 15h32

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