2009-06-14 6 views
3

Ma réponse JSON ressemble:Que dois-je échapper à mon HTML (réponse JSON)

{rc: "200", test: "", user: "<div class='sub1'> 
       <div class='avatar'>      
        <a href='/blah'>blah</a><br /> 
        <strong>0</strong> 
       </div> 
       <div class='sl'> 
        <p> 
         you droppped the ball this time 
        </p> 
       </div> 
       <div class='clear'> 
       </div>       
      </div>"} 

Mise à jour

Je mis à jour mon code pour mettre des guillemets sur les valeurs clés, toujours doesn 't travail:

{"rc": "200", "m" : "", "o": "<div class='s1'> 
      <div class='avatar'>      
       <a href='\/asdf'>asdf<\/a><br \/> 
       <strong>0<\/strong> 
      <\/div> 
      <div class='sl'> 
       <p> 
        444444444 
       <\/p> 
      <\/div> 
      <div class='clear'> 
      <\/div>       
     <\/div>"} 
+0

Définir "ne fonctionne toujours pas". –

+0

rien dans cet exemple. –

+0

duplication possible de [En jQuery, je renvoie HTML dans un résultat JSON, qu'est-ce que je dois échapper?] (Http://stackoverflow.com/questions/652997/in-jquery-i-am-returning-html- in-a-json-result-what-do-i-have-to-escape) – John

Répondre

3

J'ai utilisé jsonlint pour valider votre dernier exemple, et les sauts de ligne sont marqués. Quand ils ont été retirés, ils ont été validés.

{ 
    "rc": "200", 
    "m" : "", 
    "o": "<div class='s1'><div class='avatar'><a href='\/asdf'>asdf<\/a><br \/><strong>0<\/strong>  <\/div> <div class='sl'><p>444444444<\/p><\/div><div class='clear'><\/div><\/div>" 
} 
+1

Comment puis-je échapper à des sauts de ligne programmés? – mrblah

-1

Vous n'avez pas besoin d'échapper HTML dans une chaîne javascript. Qu'est-ce que vous essayez exactement de faire/quel est le problème? Jetez un oeil à la fonction escape() - cela pourrait aider.

+5

La fonction escape() mal nommée est pour le codage URI, et ce qui est nécessaire ici, c'est la chaîne JavaScipt qui s'échappe de la citation (soit simple ou double selon quote externe, et le backslash). –

+0

Il n'y a pas de guillemets doubles dans son exemple de chaîne, et si c'était le cas, l'utilisation de escape convertirait "en% 22 ce qui éviterait tout problème de rupture de la chaine.Vous pourriez alors facilement utiliser unescape() pour le rendre lisible . – nickf

+1

Mais, étant donné que JSON est une notation littérale d'objet JavaScript, les règles de décodage de chaîne sont sauvegardées sur l'échappement à barre oblique inverse, et non sur l'échappement d'URI. Pourquoi ajouter une autre couche d'échappement personnalisée qui doit être faite par les deux côtés, quand les règles intégrées fonctionneront? –

1

Dans votre exemple, vous n'aurez rien à échapper. Mais, si le HTML vient avec des guillemets doubles, vous devrez leur échapper, évidemment.

+1

Caractères doubles et barres obliques inverses. "C: \ xyz \" va casser des choses. –

+0

Oui, vous avez raison. Merci de me souvenir =) –

0

Vos valeurs HTML sont OK, mais les clés de l'objet JSON doivent être placées entre guillemets.

De l'JSON RFC:

2,2. Objets

Structure d'objet est représenté comme une paire de accolades
entourant zéro ou plusieurs nom/valeur paires (ou des membres). Un nom est une chaîne
.

et

2,5. La représentation des chaînes est similaire aux conventions utilisées dans la famille de langages de programmation C
. Une chaîne commence et se termine par
.

De plus, si vous émettez cet objet JSON dans les balises de script d'une page HTML, vous devez échapper à la séquence de balises de fermeture HTML « </», selon this appendix in the HTML 4 specification.

+0

Ok, j'ai mis à jour mon code, est-ce que ça a l'air de fonctionner? – mrblah

Questions connexes