10
votes

Citations simples en chaîne avec jQuery ajax

J'ai rencontré un problème dans lequel l'utilisateur entre dans les données et s'il y a des guillemets simples, les erreurs de script sortent.

Quelle est la meilleure façon de gérer des guillemets simples que les utilisateurs entrent afin qu'il n'interfère pas avec la jQuery / JavaScript?

mise à jour:

Je l'envoie à Ajax à une base de données. Voici le paramètre de données pour un appel JSON AJAX.
Data: "{Str_" + SectionName + ": '" + updatetext + "', entitéID: '" + entitéïde + "'}",
Avec la mise à jour du texte étant la chaîne pouvant contenir les devis.


3 commentaires

Fournir un échantillon de code serait très utile


Que faites-vous avec l'entrée?


Je l'envoie à Ajax à une base de données. Voici le paramètre de données pour un appel JSON AJAX. Données: "{str_" + SectionName + ": '" + updateTetText + "', entitéded: '" + entitéïde + "'}", avec la mise à jour du texte étant la chaîne pouvant contenir les devis.


9 Réponses :


23
votes

Vous devez échapper aux devis avec un \ ou en fonction de la manière dont vous envisagez d'utiliser la chaîne, vous pouvez utiliser les fonctions JavaScript Echap et Unescape. XXX

Vérifiez également cela pour les moyens de Cordes d'échappement avec jQuery


0 commentaires

3
votes

Vous pouvez trouver l'une des nombreuses implémentations String.ReplaceAll ou écrire le vôtre, et simplement remplacer toutes les citations simples ou doubles avec une version évasée comme \ "ou \ '. .


0 commentaires

0
votes

Vous devez vraiment assainir votre entrée dans votre script de serveur pour diverses raisons. Si vous affichez tout simplement tout ce que l'utilisateur entre dans l'utilisateur, votre application peut probablement être utilisée pour lancer une attaque de script de cross-site.


1 commentaires

Je pense que son problème est qu'il reçoit une erreur JavaScript, côté client, tout en essayant d'envoyer des données au serveur.



0
votes

JavaScript a une méthode intégrée juste pour cela qui couvre plus que des citations simples. Son Encodéuricomponent appelé, de Kit JavaScript :

Utilisé pour coder la partie de paramètre d'une URI pour les caractères qui ont une signification spéciale, pour les séparer de caractères réservés tels que "&" qui agissent comme des séparateurs de clé / de valeur. Plus inclusif que ENCODURI (), il code tous les caractères ayant une signification spéciale dans une chaîne d'URL, y compris "=" et "&". Utilisez cette méthode uniquement sur la partie de paramètre d'une URI; Sinon, l'URI ne peut plus être valide s'il contient l'un des caractères faisant partie d'une URI valide (c.-à-d .: "+"), mais doit être échappé si une partie du paramètre URI.

Donc, votre code devrait devenir: xxx

i codez tout ce que j'envoie dans une chaîne de requête pour être en sécurité, mais codant pour que l'entité pourrait être sans soucie d'être ignorés car Cela ne vient pas de l'utilisateur (je suppose), vous savez donc que cela n'aura pas de caractères spéciaux.


1 commentaires

Encodeuri et Encodéuricomponent ne vont pas échapper à des guillemets simples, au moins pas sur les versions actuelles de Chrome / Safari



0
votes

Merci à Mbrevoort, J'élabore plus sur sa réponse

Lorsque vous envoyez une seule citation dans une requête p> xxx pré>

lorsque vous obtenez la valeur, y compris une citation unique P>

xxx = Replace(empid, "'", "''")


0 commentaires

0
votes

Pour échapper à une seule citation dans JavaScript Utilisez

UpdateText.replace(/'/g, '\\\'')


0 commentaires

5
votes

Pour échapper aux valeurs de la demande d'Ajax, N'écrivez pas votre propre implémentation d'évasion ou d'utilisation évasion () méthode. ( Escape () est obsolète) . Créez plutôt un objet JSON et utilisez json.stringify méthode.

Pour votre cas, il devrait s'agir de (Ignorer la propriété dynamique pour l'instant) : xxx

plus tard dans votre demande Ajax, vous pouvez faire: < / p> xxx

Si vous souhaitez utiliser des propriétés dynamiques avec votre objet JSON, alors pour votre cas particulier, vous pouvez créer l'objet en deux étapes comme: xxx

Cette pratique vous évitera de l'échappement manuelle des citations simples / doubles et d'autres caractères non valides. json.stringify prendra soin de cela.

(Je suis venu ici à la recherche d'un problème un peu similaire, mais je n'ai pas trouvé de solution de travail appropriée, a fini par poster un ici)


0 commentaires

1
votes

Depuis que vous avez mentionné AJAX, il est possible que les chaînes impliquant des guillemets simples soient rejetées du côté serveur. Assurez-vous d'utiliser Fonction de chaîne d'échappement code> fourni, par exemple par PHP, avant d'insérer des chaînes, à la base de données.

$user_name = $_REQUEST['username'];
$user_name = mysqli_real_escape_string($conn,$user_name);
$query = "INSERT into chat(username,message) VALUES('".$user_name."')";


0 commentaires

0
votes

La réponse acceptée forte> ne devrait pas être la solution à utiliser.

Pour envoyer ceci à travers ajax strong> à dB strong> où Demander des données forts> a citation unique strong> ' code> dans la chaîne, faites ci-dessous: p>

  1. Organisez votre Données de la requête forte> comme objet fort>. LI> ol> xxx pré>
    1. stringfy strong> votre Data ​​forte> à JSON fort> et envoyer avec ajax strong> li> ol> xxx pré>
      1. dépend de la base de données forte>, pour SQL Server STRY>, remplacez votre citation unique ' code> sur double citation ' ' code>' ' à échapper à la citation unique forte>. li> OL>
        string data = date.Replace("'", "''")
        


0 commentaires