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. p>
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? P>
mise à jour: p>
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 + "'}", code>
Avec la mise à jour du texte étant la chaîne pouvant contenir les devis. P>
9 Réponses :
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. Vérifiez également cela pour les moyens de Cordes d'échappement avec jQuery p> p> p>
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 \ '. P>.
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. P>
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.
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. P> blockQuote>
Donc, votre code devrait devenir: p>
xxx pré> 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. P> p>
Encodeuri et Encodéuricomponent ne vont pas échapper à des guillemets simples, au moins pas sur les versions actuelles de Chrome / Safari
Merci à Mbrevoort, J'élabore plus sur sa réponse
Lorsque vous envoyez une seule citation dans une requête p> lorsque vous obtenez la valeur, y compris une citation unique P> xxx = Replace(empid, "'", "''")
Pour échapper à une seule citation dans JavaScript Utilisez
UpdateText.replace(/'/g, '\\\'')
Pour échapper aux valeurs de la demande d'Ajax, N'écrivez pas votre propre implémentation d'évasion ou d'utilisation évasion () méthode. Strong> ( Pour votre cas, il devrait s'agir de (Ignorer la propriété dynamique pour l'instant) em>: p> plus tard dans votre demande Ajax, vous pouvez faire: < / p> 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: p> Cette pratique vous évitera de l'échappement manuelle des citations simples / doubles et d'autres caractères non valides. (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) em> p> p> p> P> Escape () code> est obsolète) em>. Créez plutôt un objet JSON et utilisez
json.stringify code> méthode.
json.stringify code> prendra soin de cela. P>
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."')";
La réponse Pour envoyer ceci à travers ajax strong> à dB strong> où ' code> dans la chaîne, faites ci-dessous: p>
' code> sur double citation
' ' code>' ' à
string data = date.Replace("'", "''")
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.