Javascript remplacement des caractères *, + et / au sein d'une chaîne
Bon, je suis en train de travailler sur la façon simpliste de mimer la fonction de PHP avec la fonction urlencode() avec JS s escape() et une chaîne de caractères de remplacement. Je suis purement regardant les caractères du clavier, de sorte qu'aucune ASCII ou Unicode des caractères. Le problème que je rencontre est que les caractères spécifiques *, +, /et tous ont des significations spéciales en RegExp, et de voir que JavaScript Chaîne méthodes de l'Objet de l'utiliser RegExp paramètres, je ne peux pas entièrement répliquer PHP de la fonction urlencode(). Ainsi, comment pourrait-on gérer pour effectuer un remplacement de ces caractères à l'intérieur d'une chaîne à l'aide de JS?
Informations d'arrière-plan:
escape() les écarts avec la fonction urlencode():
@
: pas converti, devrait être %40
&
: considéré comme une entité html, donc s'est échappée comme l' %26amp%3B plutôt que %26
*
: pas converti, devrait être %2A
+
: pas converti, devrait être %2B
/
: pas converti, devrait être %2F
<
: considéré comme une entité html, donc s'est échappée comme l' %26lt%3B plutôt que %3C
>
: considéré comme une entité html, donc s'est échappée comme l' %26gt%3B plutôt que %3E
Entité HTML conversion est aussi simple que
str.replace(/&/g, '%26').replace(/</g, '%3C').replace(/>/g, '%3E');
et @
peut être remplacée, car elle n'est pas réservée RegExp caractère.
*
représente la {0}
conditionnelle
+
représente la {1}
conditionnelle
/
est la base de RegExp tag caractère
Je vous remercie pour votre temps.
- Pourquoi pas à l'aide de JavaScript intégré dans la fonction encodeURIComponent ()? w3schools.com/jsref/jsref_encodeuricomponent.asp
Vous devez vous connecter pour publier un commentaire.
Est-il une raison de ne pas simplement échapper à l'*, + et /personnages avec des barres obliques inverses dans la regex?
Pour moi, le chaînage
replace
s n'est pas très élégant. Je voudrais essayer:Idéalement, cela permet aussi d'éviter le problème d'origine.
Désolé que je ne suis pas en utilisant le même compte, mais pour répondre à tous, va ici:
M. Plunkett, échappant les caractères ne fonctionne pas dans ce cas, pour quelque raison que ce soit (probablement en raison de leur caractère réservé d'état). J'ai oublié de mentionner que j'ai essayé d'y échapper xD.
M. l'Espérance, je vous remercie pour la solution de contournement. Je vais vérifier cela et voir si cela fonctionne (il devrait).
Mahir (محير؟), Tout d'abord, la chaîne d'accès au tableau serait un très très long, plus de code, surtout lorsqu'il s'agit de trois caractères supplémentaires qui doivent être remplacés (oui, je sais, il pourrait juste être un if/else if/else if, mais c'est encore tout à fait un peu de code).
Oui, et bien ça suffit de dire qu'il est mon caractère de prédilection de la littérature Française.
En ce qui concerne William réponse, si vous faites un peu de recherche, vous remarquerez que encodeURIComponent() ne le fait pas coder une multitude de personnages qui sont codés en PHP avec la fonction urlencode(). L'objet de cette question était de construire une simple réplique de la fonction urlencode() à l'intérieur de JS.
Merci à tous pour la réponse, c'est très apprécié.
--additif--
M. l'Espérance de code fonctionne, avec un seul tweak:
De toute évidence quelqu'un d'autre peut changer le code d'un autre moyen de le faire fonctionner, mais pour moi, éliminer la diaphonie de s'échapper les signes de pourcentage de remplacement est beaucoup plus pratique.
Merci à vous tous, une fois de plus.
Vous pouvez toujours utiliser un bon ole' de la chaîne d'accès au tableau.