mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Add encoding and errors arguments to urllib.parse_qs() and urllib.parse_qsl()
This commit is contained in:
parent
489f392a0e
commit
ac71c54b88
3 changed files with 31 additions and 7 deletions
|
@ -116,7 +116,7 @@ or on combining URL components into a URL string.
|
||||||
Added IPv6 URL parsing capabilities.
|
Added IPv6 URL parsing capabilities.
|
||||||
|
|
||||||
|
|
||||||
.. function:: parse_qs(qs, keep_blank_values=False, strict_parsing=False)
|
.. function:: parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')
|
||||||
|
|
||||||
Parse a query string given as a string argument (data of type
|
Parse a query string given as a string argument (data of type
|
||||||
:mimetype:`application/x-www-form-urlencoded`). Data are returned as a
|
:mimetype:`application/x-www-form-urlencoded`). Data are returned as a
|
||||||
|
@ -133,11 +133,15 @@ or on combining URL components into a URL string.
|
||||||
parsing errors. If false (the default), errors are silently ignored. If true,
|
parsing errors. If false (the default), errors are silently ignored. If true,
|
||||||
errors raise a :exc:`ValueError` exception.
|
errors raise a :exc:`ValueError` exception.
|
||||||
|
|
||||||
|
The optional *encoding* and *errors* parameters specify how to decode
|
||||||
|
percent-encoded sequences into Unicode characters, as accepted by the
|
||||||
|
:meth:`bytes.decode` method.
|
||||||
|
|
||||||
Use the :func:`urllib.parse.urlencode` function to convert such
|
Use the :func:`urllib.parse.urlencode` function to convert such
|
||||||
dictionaries into query strings.
|
dictionaries into query strings.
|
||||||
|
|
||||||
|
|
||||||
.. function:: parse_qsl(qs, keep_blank_values=False, strict_parsing=False)
|
.. function:: parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')
|
||||||
|
|
||||||
Parse a query string given as a string argument (data of type
|
Parse a query string given as a string argument (data of type
|
||||||
:mimetype:`application/x-www-form-urlencoded`). Data are returned as a list of
|
:mimetype:`application/x-www-form-urlencoded`). Data are returned as a list of
|
||||||
|
@ -153,6 +157,10 @@ or on combining URL components into a URL string.
|
||||||
parsing errors. If false (the default), errors are silently ignored. If true,
|
parsing errors. If false (the default), errors are silently ignored. If true,
|
||||||
errors raise a :exc:`ValueError` exception.
|
errors raise a :exc:`ValueError` exception.
|
||||||
|
|
||||||
|
The optional *encoding* and *errors* parameters specify how to decode
|
||||||
|
percent-encoded sequences into Unicode characters, as accepted by the
|
||||||
|
:meth:`bytes.decode` method.
|
||||||
|
|
||||||
Use the :func:`urllib.parse.urlencode` function to convert such lists of pairs into
|
Use the :func:`urllib.parse.urlencode` function to convert such lists of pairs into
|
||||||
query strings.
|
query strings.
|
||||||
|
|
||||||
|
|
|
@ -523,7 +523,8 @@ def unquote(string, encoding='utf-8', errors='replace'):
|
||||||
string += pct_sequence.decode(encoding, errors)
|
string += pct_sequence.decode(encoding, errors)
|
||||||
return string
|
return string
|
||||||
|
|
||||||
def parse_qs(qs, keep_blank_values=False, strict_parsing=False):
|
def parse_qs(qs, keep_blank_values=False, strict_parsing=False,
|
||||||
|
encoding='utf-8', errors='replace'):
|
||||||
"""Parse a query given as a string argument.
|
"""Parse a query given as a string argument.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
@ -540,16 +541,22 @@ def parse_qs(qs, keep_blank_values=False, strict_parsing=False):
|
||||||
strict_parsing: flag indicating what to do with parsing errors.
|
strict_parsing: flag indicating what to do with parsing errors.
|
||||||
If false (the default), errors are silently ignored.
|
If false (the default), errors are silently ignored.
|
||||||
If true, errors raise a ValueError exception.
|
If true, errors raise a ValueError exception.
|
||||||
|
|
||||||
|
encoding and errors: specify how to decode percent-encoded sequences
|
||||||
|
into Unicode characters, as accepted by the bytes.decode() method.
|
||||||
"""
|
"""
|
||||||
dict = {}
|
dict = {}
|
||||||
for name, value in parse_qsl(qs, keep_blank_values, strict_parsing):
|
pairs = parse_qsl(qs, keep_blank_values, strict_parsing,
|
||||||
|
encoding=encoding, errors=errors)
|
||||||
|
for name, value in pairs:
|
||||||
if name in dict:
|
if name in dict:
|
||||||
dict[name].append(value)
|
dict[name].append(value)
|
||||||
else:
|
else:
|
||||||
dict[name] = [value]
|
dict[name] = [value]
|
||||||
return dict
|
return dict
|
||||||
|
|
||||||
def parse_qsl(qs, keep_blank_values=False, strict_parsing=False):
|
def parse_qsl(qs, keep_blank_values=False, strict_parsing=False,
|
||||||
|
encoding='utf-8', errors='replace'):
|
||||||
"""Parse a query given as a string argument.
|
"""Parse a query given as a string argument.
|
||||||
|
|
||||||
Arguments:
|
Arguments:
|
||||||
|
@ -566,6 +573,9 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False):
|
||||||
false (the default), errors are silently ignored. If true,
|
false (the default), errors are silently ignored. If true,
|
||||||
errors raise a ValueError exception.
|
errors raise a ValueError exception.
|
||||||
|
|
||||||
|
encoding and errors: specify how to decode percent-encoded sequences
|
||||||
|
into Unicode characters, as accepted by the bytes.decode() method.
|
||||||
|
|
||||||
Returns a list, as G-d intended.
|
Returns a list, as G-d intended.
|
||||||
"""
|
"""
|
||||||
qs, _coerce_result = _coerce_args(qs)
|
qs, _coerce_result = _coerce_args(qs)
|
||||||
|
@ -584,8 +594,12 @@ def parse_qsl(qs, keep_blank_values=False, strict_parsing=False):
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
if len(nv[1]) or keep_blank_values:
|
if len(nv[1]) or keep_blank_values:
|
||||||
name = _coerce_result(unquote(nv[0].replace('+', ' ')))
|
name = nv[0].replace('+', ' ')
|
||||||
value = _coerce_result(unquote(nv[1].replace('+', ' ')))
|
name = unquote(name, encoding=encoding, errors=errors)
|
||||||
|
name = _coerce_result(name)
|
||||||
|
value = nv[1].replace('+', ' ')
|
||||||
|
value = unquote(value, encoding=encoding, errors=errors)
|
||||||
|
value = _coerce_result(value)
|
||||||
r.append((name, value))
|
r.append((name, value))
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
|
|
@ -43,6 +43,8 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Add encoding and errors arguments to urllib.parse_qs() and urllib.parse_qsl()
|
||||||
|
|
||||||
- Issue #10899: No function type annotations in the standard library.
|
- Issue #10899: No function type annotations in the standard library.
|
||||||
Removed function type annotations from _pyio.py.
|
Removed function type annotations from _pyio.py.
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue