diff options
Diffstat (limited to 'testing/web-platform/tests/url/resources/percent-encoding.py')
-rw-r--r-- | testing/web-platform/tests/url/resources/percent-encoding.py | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/testing/web-platform/tests/url/resources/percent-encoding.py b/testing/web-platform/tests/url/resources/percent-encoding.py new file mode 100644 index 0000000000..e8fbb7d3b3 --- /dev/null +++ b/testing/web-platform/tests/url/resources/percent-encoding.py @@ -0,0 +1,23 @@ +import base64 +from wptserve.utils import isomorphic_decode + +# Use numeric references to let the HTML parser take care of inserting the correct code points +# rather than trying to figure out the necessary bytes for each encoding. (The latter can be +# especially tricky given that Python does not implement the Encoding Standard.) +def numeric_references(input): + output = b"" + for cp in input: + output += b"&#x" + format(ord(cp), u"X").encode(u"utf-8") + b";" + return output + +def main(request, response): + # Undo the "magic" space with + replacement as otherwise base64 decoding will fail. + value = request.GET.first(b"value").replace(b" ", b"+") + encoding = request.GET.first(b"encoding") + + output_value = numeric_references(base64.b64decode(value).decode(u"utf-8")) + return ( + [(b"Content-Type", b"text/html;charset=" + encoding)], + b"""<!doctype html> +<a href="https://doesnotmatter.invalid/?%s#%s">test</a> +""" % (output_value, output_value)) |