diff --git a/doc/en/scripting/extensions.md b/doc/en/scripting/extensions.md index 94a55ef00..9ba99f1ef 100644 --- a/doc/en/scripting/extensions.md +++ b/doc/en/scripting/extensions.md @@ -139,6 +139,12 @@ string.left_pad(str: string, size: int, char: string) -> string -- Adds a char to the right of the string until its size equals size. -- By default, char is equal to the space character. string.right_pad(str: string, size: int, char: string) -> string + +-- Encodes a string into URL format, replacing special characters with their hexadecimal representations. +string.url_encode(str: string) -> string + +-- Decodes a string from URL format, replacing hexadecimal representations with their corresponding characters. +string.url_decode(str: string) -> string ``` ## Math extensions diff --git a/doc/ru/scripting/extensions.md b/doc/ru/scripting/extensions.md index 91859fbf1..3a372a9a5 100644 --- a/doc/ru/scripting/extensions.md +++ b/doc/ru/scripting/extensions.md @@ -141,6 +141,12 @@ string.left_pad(str: string, size: int, char: string) -> string -- Добавляет char справа от строки, пока её размер не будет равен size. -- По стандарту char равен символу пробела. string.right_pad(str: string, size: int, char: string) -> string + +-- Кодирует строку в формат URL, заменяя специальные символы на их шестнадцатеричные представления. +string.url_encode(str: string) -> string + +-- Декодирует строку из формата URL, заменяя шестнадцатеричные представления на соответствующие символы. +string.url_decode(str: string) -> string ``` ## Расширения для math diff --git a/res/modules/internal/extensions/string.lua b/res/modules/internal/extensions/string.lua index 313ae57bd..eb3668687 100644 --- a/res/modules/internal/extensions/string.lua +++ b/res/modules/internal/extensions/string.lua @@ -125,3 +125,18 @@ end function string.ends_with(str, endStr) return endStr == "" or string.sub(str, -string.len(endStr)) == endStr end + +function string.url_encode(str) + str = string.gsub(str, "([^%w%-%.%_%~])", function(c) + return string.format("%%%02X", string.byte(c)) + end) + return str +end + +function string.url_decode(str) + str = string.gsub(str, "+", " ") + str = string.gsub(str, "%%(%x%x)", function(hex) + return string.char(tonumber(hex, 16)) + end) + return str +end