From f42bdb39192c58c0147da50a654e7840834c12f1 Mon Sep 17 00:00:00 2001 From: Temir Galeev Date: Wed, 25 Feb 2026 20:11:09 +0300 Subject: [PATCH 1/2] uri: escape/unescape note with ex added --- doc/code_snippets/test/uri/uri_parse_test.lua | 58 +++++++++++++++++++ doc/reference/reference_lua/uri.rst | 6 +- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/doc/code_snippets/test/uri/uri_parse_test.lua b/doc/code_snippets/test/uri/uri_parse_test.lua index 83f945ad3..9c3ac1832 100644 --- a/doc/code_snippets/test/uri/uri_parse_test.lua +++ b/doc/code_snippets/test/uri/uri_parse_test.lua @@ -84,3 +84,61 @@ test_group.test_uri_parsing2 = function() luatest.assert_equals(parsed_uri21.params, {x = {'2'}, y = {'3'}}) luatest.assert_equals(formatted_uri2, 'foo.bar?y=3&x=2') end + +formatted_uri3_e = uri.format({ + login = uri.escape('replic@ator'), + password = uri.escape(':::'), + host = 'foo.bar', + params = {x = uri.escape('sec ret?', uri.FORM_URLENCODED)} + }, + true +) +--[[ +--- +- replic%40ator:%3A%3A%3A@foo.bar?x=sec+ret%3F +... +]]-- + +parsed_uri3_e = uri.parse(formatted_uri3_e) +--[[ +--- +- password: '%3A%3A%3A' + login: replic%40ator + query: x=sec+ret%3F + params: + x: + - sec+ret%3F + host: foo.bar +... +]]-- + +parsed_uri3 = { + login = uri.unescape(parsed_uri3_e.login), + password = uri.unescape(parsed_uri3_e.password), + host = parsed_uri3_e.host, + params = {x = {uri.unescape(parsed_uri3_e.params.x[1], uri.FORM_URLENCODED)}}, +} +--[[ +--- +- password: ':::' + params: + x: + - sec ret? + host: foo.bar + login: replic@ator +... +]]-- + +test_group.test_uri_parsing3 = function() + luatest.assert_equals(formatted_uri3_e, 'replic%40ator:%3A%3A%3A@foo.bar?x=sec+ret%3F') + luatest.assert_equals(parsed_uri3_e.login, 'replic%40ator') + luatest.assert_equals(parsed_uri3_e.password, '%3A%3A%3A') + luatest.assert_equals(parsed_uri3_e.host, 'foo.bar') + luatest.assert_equals(parsed_uri3_e.query, 'x=sec+ret%3F') + luatest.assert_equals(parsed_uri3_e.params, {x = {'sec+ret%3F'}}) + + luatest.assert_equals(parsed_uri3.login, 'replic@ator') + luatest.assert_equals(parsed_uri3.password, ':::') + luatest.assert_equals(parsed_uri3.host, 'foo.bar') + luatest.assert_equals(parsed_uri3.params, {x = {'sec ret?'}}) +end diff --git a/doc/reference/reference_lua/uri.rst b/doc/reference/reference_lua/uri.rst index 01edf7dd0..f411a3c1f 100644 --- a/doc/reference/reference_lua/uri.rst +++ b/doc/reference/reference_lua/uri.rst @@ -15,8 +15,12 @@ components, or turn components into URI strings, for example: :language: lua :lines: 1-21 -You can also use this module to encode and decode arbitrary strings using the specified encoding options. +To escape and unescape special characters corresponding functions must be used: +.. literalinclude:: /code_snippets/test/uri/uri_parse_test.lua + :language: lua + :lines: 88-130 +You can also use this module to encode and decode arbitrary strings using the specified encoding options. .. _uri-module-api-reference: From 8a91ae87212d87eb426e5dd18ab22fba715a4163 Mon Sep 17 00:00:00 2001 From: Temir Galeev Date: Tue, 3 Mar 2026 21:32:12 +0300 Subject: [PATCH 2/2] Update doc/reference/reference_lua/uri.rst Co-authored-by: Elena Shebunyaeva --- doc/reference/reference_lua/uri.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/reference/reference_lua/uri.rst b/doc/reference/reference_lua/uri.rst index f411a3c1f..3be343b4a 100644 --- a/doc/reference/reference_lua/uri.rst +++ b/doc/reference/reference_lua/uri.rst @@ -15,7 +15,7 @@ components, or turn components into URI strings, for example: :language: lua :lines: 1-21 -To escape and unescape special characters corresponding functions must be used: +To escape and unescape special characters, corresponding functions must be used: .. literalinclude:: /code_snippets/test/uri/uri_parse_test.lua :language: lua :lines: 88-130