Funciones de Javascript equivalentes para urllib.quote () y urllib.unquote de Python

¿Existen funciones de Javascript equivalentes para urllib.quote() y urllib.unquote() ?

Lo más cercano que he encontrado son escape() , encodeURI() y encodeURIComponent() (y sus correspondientes funciones de no encoding), pero no codifican / decodifican el mismo conjunto de caracteres especiales por lo que puedo decir. .

Gracias,
Cameron

Para el registro:

 JavaScript | Python ----------------------------------- encodeURI(str) | urllib.quote(str, safe='~@#$&()*!+=:;,.?/\''); ----------------------------------- encodeURIComponent(str) | urllib.quote(str, safe='~()*!.\'') 

Bien, creo que voy a ir con un conjunto de funciones híbrido personalizado:

Codificar: use encodeURIComponent (), luego vuelva a colocar las barras inclinadas.
Decodificar: Decodifica cualquier% de valores hexadecimales encontrados.

Aquí hay una variante más completa de lo que terminé usando (también maneja Unicode correctamente):

 function quoteUrl(url, safe) { if (typeof(safe) !== 'string') { safe = '/'; // Don't escape slashes by default } url = encodeURIComponent(url); // Unescape characters that were in the safe list toUnencode = [ ]; for (var i = safe.length - 1; i >= 0; --i) { var encoded = encodeURIComponent(safe[i]); if (encoded !== safe.charAt(i)) { // Ignore safe char if it wasn't escaped toUnencode.push(encoded); } } url = url.replace(new RegExp(toUnencode.join('|'), 'ig'), decodeURIComponent); return url; } var unquoteUrl = decodeURIComponent; // Make alias to have symmetric function names 

Tenga en cuenta que si no necesita caracteres “seguros” al codificar ( '/' de forma predeterminada en Python), puede usar directamente las funciones encodeURIComponent() y decodeURIComponent() incorporadas.

Además, si hay caracteres Unicode (es decir, caracteres con punto de código> = 128) en la cadena, para mantener la compatibilidad con encodeURIComponent() JavaScript, Python quote_url() tendría que ser:

 def quote_url(url, safe): """URL-encodes a string (either str (ie ASCII) or unicode); uses de-facto UTF-8 encoding to handle Unicode codepoints in given string. """ return urllib.quote(unicode(url).encode('utf-8'), safe) 

Y unquote_url() sería:

 def unquote_url(url): """Decodes a URL that was encoded using quote_url. Returns a unicode instance. """ return urllib.unquote(url).decode('utf-8') 

La biblioteca de solicitudes es un poco más popular si no te importa la dependencia adicional

 from requests.utils import quote quote(str) 

Intente una expresión regular. Algo como esto:

 mystring.replace(/[\xFF-\xFFFF]/g, "%" + "$&".charCodeAt(0)); 

Eso reemplazará cualquier carácter por encima del ordinal 255 con su correspondiente representación% HEX.

Python: urllib.quote

Javascript: unescape

No he realizado pruebas exhaustivas, pero para mis propósitos funciona la mayor parte del tiempo. Supongo que tienes algunos personajes específicos que no funcionan. Tal vez si utilizo algún texto asiático o algo se romperá 🙂

Esto surgió cuando busqué en Google, así que lo puse para todos los demás, si no específicamente para la pregunta original.