Comment détecter si une chaîne est codé avec escape() ou encodeURIComponent()

J'ai un service web qui reçoit des données à partir de divers clients. Certains d'entre eux envoie les données codées à l'aide d'échappement(), tandis que les autres utilisent plutôt encodeURIComponent(). Est-il un moyen de détecter le type d'encodage utilisé pour échapper aux données?

Pourquoi avez-vous besoin de savoir?
Je n'ai pas de contrôle des données envoyées par nos clients, et comme je l'ai dit avant, certains d'entre eux utilisent escape (), tandis que les autres utilisent encodeURIComponent() à la place. À l'aide de ne pas encoder dans une chaîne de caractères codés avec encodeURIComponent() générer des mauvais caractères, et je veux éviter. Est une validation juridique pour voir si la chaîne a est des séquences d'échappement en paires, en %xx%xx.
Enfin j'ai trouvé la réponse. decodeURIComponent toujours échappé à décoder les caractères, car il utilise certaines conventions de détecter pour chaque symbole si c'est de l'encodage en utf-8 ou ascii. Cependant, comme Swingley commentaires, si un client envoie des données codées à l'aide d'escape(), certaines données pourraient être perdues ou tronqués. Donc, je donne le point à lui.
Depuis encodeURIComponent() utilise l'encodage UTF-8 de caractères >= 128, vous pouvez sur le côté serveur de vérifier la validité des séquences UTF-8. Si les données contiennent des invalides séquences UTF-8, les données ont été produites à l'évasion() et vous avez probablement suppose que c'est de l'ISO-8859-1 codé. Octets de l'ISO-8859-1 de données, dans la pratique, jamais ne regarde comme valables des séquences UTF-8.

OriginalL'auteur Rodrigo | 2009-08-14