当前位置: 首页 > 面试题库 >

Python的urllib.quote()和urllib.unquote()的等效Javascript函数

鲜于德泽
2023-03-14
问题内容

是否有与Pythonurllib.quote()和等效的Javascript函数urllib.unquote()

我遇到的最接近的是escape()encodeURI()和和encodeURIComponent()(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。

谢谢,
卡梅伦


问题答案:

好的,我想我将使用一组混合的自定义函数:

编码:使用encodeURIComponent(),然后放回斜杠。
解码:对找到的所有%hex值进行解码。

这是我最终使用的内容的更完整变体(它也可以正确处理Unicode):

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 functhtml" target="_blank">ion names

请注意,如果在编码时(你并不需要“安全”的字符'/'默认的Python),那么你可以使用内置的encodeURIComponent()decodeURIComponent()直接的功能。

另外,如果字符串中包含Unicode字符(即,代码点> =
128的字符),则为了保持与JavaScript的兼容性encodeURIComponent(),Pythonquote_url()必须为:

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)

并且unquote_url()将是:

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


 类似资料:
  • 问题内容: Python和不能在Python 2.6.5中正确处理Unicode。这是发生了什么: 将值编码为UTF8也不起作用: 它被认为是错误,并且有修复程序,但不适用于我的Python版本。 我想要的是类似于urllib.quote / urllib.unquote的东西,但是可以正确处理unicode变量,因此该代码可以正常工作: 有什么建议吗? 问题答案: Python的urllib.q

  • 问题内容: 是否有与的函数等效的也就是说,给定多个相同长度的数组,将创建一个成对的数组。 例如,如果我有三个看起来像这样的数组: 输出数组应为: 问题答案: 这是一个时髦的Ecmascript 6版本: 相当于插图。到: (并且指出ES6具有可变参数语法,因此以下函数定义将类似于python,但请参见下文的免责声明…这将不是其自身的逆,因此)将不相等x;尽管正如Matt Kramer指出的那样例如

  • 问题内容: python中是否有类似于R中的dput()函数的函数? 问题答案: 有几种将Python对象序列化为文件的选项: 以JSON格式存储数据。它是非常可读和可编辑的,但是只能存储列表,字典,字符串,数字,布尔值,因此没有复合对象。您需要先使模块可用。 可以存储大多数对象。 不常见: 该模块将多个Python对象存储在DBM数据库中,大多数情况下就像一个persistent 。 :不确定何

  • Python中是否有类似于R中dput()函数的函数?

  • 问题内容: 当我从解释器编写Python代码时,我可以键入要在当前作用域中定义的名称列表。当我使用交互式控制台(如Firebug,Chrome控制台等)从浏览器开发Javascript代码时,如何以编程方式实现具有相同的信息? 问题答案: 在ChatZilla的代码中,有几个功能可以执行此操作,您必须正确检查许可证以查看是否可以将其撕下来并在任何地方使用。 相关功能可以在 http://hg.mo

  • 问题内容: 有与python eval函数等效的Java吗? 这将是一个接受任意字符串并尝试在当前上下文中执行它的函数。 问题答案: 根据此Java技巧,如果您愿意使用,则可以即时编译Java字符串。 当然,其中的类不是官方Java API的一部分。 在Java 6中,有一个CompilerAPI,用于提供对编译器的编程访问。请参阅接口JavaCompiler的文档。 任何标准API均未提供直接功