Où puis-je trouver une liste de caractères d'échappement nécessaire pour mon JSON, ajax type de retour?
J'ai un ASP.NET MVC action, qui retourne un objet JSON.
Le JSON:
{status: "1", message:"", output:"<div class="c1"><div class="c2">User generated text, so can be anything</div></div>"}
Actuellement mon code HTML est de le casser. Il y aura de l'utilisateur le texte généré dans le champ de sortie, donc je dois m'assurer d'échapper à TOUTES les choses qui doivent être échappés.
Quelqu'un d'avoir une liste de toutes les choses que j'ai besoin d'évasion?
Je n'utilise pas de JSON bibliothèques, juste la construction de la chaîne de moi-même.
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à http://json.org/. Il réclame un peu différente de la liste des évadés de caractères de Chris proposé.
\f
)\uXXXX
codes d'échappement spécifier un point de code dans le Plan Multilingue de Base (U+0000 à U+FFFF). Voir les spécifications officielles "ECMA-404, Le JSON d'Échange de Données Standard" pour plus d'informations.Ici est une liste de caractères spéciaux que vous pouvez échapper lors de la création d'un littéral de chaîne JSON:
Référence: Les littéraux de chaîne
Certains sont facultatifs que les autres. Par exemple, votre chaîne doit être parfaitement valable si vous vous échapper le caractère de tabulation ou de la laisser dans un onglet littérale. Vous devez certainement être la manipulation de la barre oblique inverse et des guillemets, si.
/
est une bonne idée, trop. Au moins quand c'est une partie de</script>
.\'
n'est pas un JSON valide code d'échappement et entraîne des erreurs de validation lors de l'utilisation de JSONLintComme expliqué dans la section 9 de l'officiel de la spécification ECMA (http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf)
en JSON, la suite de caractères doivent être échappés:
U+0022
("
, le guillemet)U+005C
(\
, la barre oblique inverse ou barre oblique inverse)U+0000
àU+001F
(les caractères de contrôle ASCII)En outre, afin d'intégrer en toute sécurité JSON en HTML, la suite de caractères doivent être échappés:
U+002F
(/
)U+0027
('
)U+003C
(<
)U+003E
(>
)U+0026
(&
)U+0085
(Ligne Suivante)U+2028
(Séparateur De Ligne)U+2029
(Paragraphe Séparateur)Certains des personnages ci-dessus peut être échappé à la suite de courtes séquences d'échappement défini dans la norme:
\"
représente le caractère guillemet (U+0022).\\
représente l'inverse de la barre oblique caractères (U+005 C).\/
représente le caractère barre oblique (U+002F).\b
représente le caractère de retour arrière (U+0008).\f
représente le saut de caractère (U+000C).\n
représente le caractère de saut de ligne (U+000A).\r
représente le caractère de retour chariot (U+000D).\t
représente le caractère de caractère de tabulation (U+0009).Les autres caractères doivent être échappés utilisera le
\uXXXX
notation, c'est-à\u
suivie de quatre chiffres hexadécimaux qui codent le point de code.La
\uXXXX
peut être également utilisé à la place de la courte séquence d'échappement, ou si vous souhaitez échapper à n'importe quel autre personnage de la Basic Multilingual Plane (BMP).Tout de suite, je peux dire qu'au moins le double quotes dans les balises HTML sont va être un problème. Ceux-ci sont probablement tout ce que vous aurez besoin de s'échapper pour qu'il soit valable JSON; il suffit de remplacer
avec
Comme pour la sortie d'utilisateur d'entrée de texte, vous devez assurez-vous que vous exécutez à travers HttpUtility.HtmlEncode() pour éviter Les attaques XSS et assurez-vous qu'il n'a pas de vis de la mise en forme de votre page.
De la spec:
Juste parce que par exemple, Bell (U+0007) n'ont pas un caractère unique code d'échappement ne signifie pas que vous n'avez pas besoin de s'en échapper. Utiliser la séquence d'échappement Unicode
\u0007
."/"
RFC:"Url": "http://www.example.com/image/481989943",
Quelques commentaires que j'ai vu suggèrent solidus que doit être échappés lorsque, à la suite<
, par exemple:<\/tag>
, mais si c'est le cas, pourquoi les specs, donc l'écart à ce sujet? Basé sur la RFC, je suis de s'échapper de la barre oblique, mais j'ai été interrogé à ce sujet par des gens qui ne sont pas habitués à voir dans leurs documents. Donc j'essaye de donner une réponse intelligente, et non pas la spéculation. Merci."\/"
et"/"
sont légalesLe JSON de référence unis:
Ensuite les listes de la norme des codes d'échappement:
De cela, je suppose que j'ai besoin d'échapper à tous les proches et tous les autres sont facultatifs. Vous pouvez choisir d'encoder tous les caractères en
\uXXXX
si vous le souhaité, ou vous ne pouvez les faire n'importe quel non-imprimable des caractères ASCII 7 bits ou de caractères avec la valeur Unicode pas dans\u0020 <= x <= \u007E
gamme(32 - 126)
. De préférence, les caractères standard premier plus courtes, les codes d'échappement et ainsi améliorer la lisibilité et la performance.En outre, vous pouvez lire le point 2.5 (Chaînes de caractères) à partir de RFC 4627.
Que vous pouvez (ou pas) qui veulent (encore) d'échapper à d'autres caractères selon l'endroit où vous l'incorporer chaîne JSON, mais qui est en dehors de la portée de cette question.