好的,我想我将使用一组混合的自定义函数:
编码:使用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 function names
@H_419_9@请注意,如果在编码时(你并不需要“安全”的字符
'/'
默认的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)
@H_419_9@并且
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')
@H_419_9@解决方法
是否有与Python
urllib.quote()
和等效的Javascript函数urllib.unquote()
?我遇到的最接近的是
escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。谢谢,
卡梅伦
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)
@H_419_9@并且
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')
@H_419_9@解决方法
是否有与Python
urllib.quote()
和等效的Javascript函数urllib.unquote()
?我遇到的最接近的是
escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。谢谢,
卡梅伦
def unquote_url(url): """Decodes a URL that was encoded using quote_url. Returns a unicode instance. """ return urllib.unquote(url).decode('utf-8')
@H_419_9@解决方法
是否有与Python
urllib.quote()
和等效的Javascript函数urllib.unquote()
?我遇到的最接近的是
escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。谢谢,
卡梅伦
请注意,如果在编码时(你并不需要“安全”的字符'/'
默认的Python),那么你可以使用内置的encodeURIComponent()
和decodeURIComponent()
直接的功能。
另外,如果字符串中包含Unicode字符(即,代码点> =
128的字符),则为了保持与JavaScript的兼容性encodeURIComponent()
,Pythonquote_url()
必须为:
并且unquote_url()
将是:
是否有与Pythonurllib.quote()
和等效的Javascript函数urllib.unquote()
?
我遇到的最接近的是escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。
谢谢,
卡梅伦
请注意,如果在编码时(你并不需要“安全”的字符'/'
默认的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)
@H_419_9@并且
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')
@H_419_9@解决方法
是否有与Python
urllib.quote()
和等效的Javascript函数urllib.unquote()
?我遇到的最接近的是
escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。谢谢,
卡梅伦
def unquote_url(url): """Decodes a URL that was encoded using quote_url. Returns a unicode instance. """ return urllib.unquote(url).decode('utf-8')
@H_419_9@解决方法
是否有与Python
urllib.quote()
和等效的Javascript函数urllib.unquote()
?我遇到的最接近的是
escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。谢谢,
卡梅伦
并且unquote_url()
将是:
是否有与Pythonurllib.quote()
和等效的Javascript函数urllib.unquote()
?
我遇到的最接近的是escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。
谢谢,
卡梅伦
并且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')
@H_419_9@解决方法
是否有与Python
urllib.quote()
和等效的Javascript函数urllib.unquote()
?我遇到的最接近的是
escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。谢谢,
卡梅伦
是否有与Pythonurllib.quote()
和等效的Javascript函数urllib.unquote()
?
我遇到的最接近的是escape()
,encodeURI()
和和encodeURIComponent()
(及其对应的非编码函数),但据我所知,它们不会对同一组特殊字符进行编码/解码。
谢谢,
卡梅伦