¿Hay algún equivalente de las funciones de Javascript para Python urllib.cita() y urllib.cierro la cita()?

El más cercano que he encontrado son escape(), encodeURI(), y encodeURIComponent() (y sus correspondientes de la onu-la codificación de funciones), pero no codificar/decodificar el mismo conjunto de caracteres especiales a medida de lo que puedo decir.

Gracias,

Cameron

InformationsquelleAutor Cameron | 2009-06-03

5 Comentarios

  1. 69

    Para el registro:

    JavaScript               |  Python
    ----------------------------------- 
    encodeURI(str)           |  urllib.quote(str, safe='[email protected]#$&()*!+=:;,.?/\'');
    -----------------------------------
    encodeURIComponent(str)  |  urllib.quote(str, safe='~()*!.\'')
    • Para el aún más pendantic registro, encodeURIComponent usa UTF-8, mientras que urllib.quote(u'é'), por ejemplo, se lanza una excepción. El equivalente de Python codificación debe ser urllib.quote(unicode(str).encode('utf-8'), safe=...
    • En Python3, urllib.analizar.cita(s, caja de seguridad=’…’) debe ser utilizado. la codificación por defecto utf-8. Consulte docs.python.org/3.0/library/…
  2. 6

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

    Codificar: el Uso de encodeURIComponent(), a continuación, poner barras en.

    Decodificar: Decodificar cualquier %valores hexadecimales encontrado.

    He aquí una más completa variante de lo terminé usando (se encarga de 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 usted no necesita la «caja fuerte» caracteres cuando se codifica ('/' por defecto en Python), entonces usted puede utilizar el built-in encodeURIComponent() y decodeURIComponent() funciones directamente.

    También, si hay caracteres Unicode (es decir, los caracteres de punto de código >= 128) en la cadena, entonces para mantener la compatibilidad con JavaScript encodeURIComponent(), el Python quote_url() tendría que ser:

    def quote_url(url, safe):
        """URL-encodes a string (either str (i.e. 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')
    • Si vas a responder a su propia pregunta, al menos se toman el tiempo para poner una respuesta más detallada juntos para ayudar a otros que tropiece con la misma pregunta.
    • Hmm, lo siento. Voy a ampliar mi respuesta y añadir un poco de código.
    • He utilizado el unquote_url función, pero se encontró con problemas al pasar a Python 3 – la descodificación es automático, en python 3, en python 2, es todavía necesario. No podía encontrar una manera de hacerlo bien, que trabajó en los dos idiomas. Mi py3 código es urllib.parse.unquote(six.text_type(a))
  3. 1

    Trate de una expresión regular. Algo como esto:

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

    Que reemplazará a cualquier personaje de la anterior ordinal 255 con su correspondiente %representación HEXADECIMAL.

    • Que genial para los caracteres por encima de 255, pero hay algunas otras divertidas que cita() de las capturas que están por debajo de 255 (como ‘?’, ‘&’, ‘@’, y otros en los que no sepan)
    • Los corchetes denotan un conjunto de caracteres que puede incluir caracteres individuales así como los rangos. Usted fácilmente puede escribir como /[\?&@\xFF-\xFFFF]/g para lograr ese resultado. Usted sólo necesita escapar de cualquier chars que también regex caracteres especiales (como ? o /).
  4. 1

    Python: urllib.quote

    Javascript:unescape

    No he hecho pruebas exhaustivas, pero para mis propósitos funciona la mayoría del tiempo. Supongo que usted tiene algunos caracteres específicos que no funcionan. Tal vez si yo uso un texto Asiático o algo se va a romper 🙂

    Esto surgió cuando busqué en google para poner esto en todos los demás, si no específicamente para la pregunta original.

Dejar respuesta

Please enter your comment!
Please enter your name here