LINUX.ORG.RU

Экранирование URI в Lua

 , , ,


0

2

Привет ЛОР, ищу библиотечку которая умеет делать сабж. Нужно что то быстрое (т.е. реализация на чистом Lua не прокатит), и умное - что бы экранировало не все символы подряд, а в зависимости от того, в какой части URL они находятся. Из того, что пробовал:

  • ngx_escape_uri из openresty - быстрый, но тупой, просто экранирует определенный набор символов независимо от того, где они находятся

  • xmlUriEscape из libxml2 - почти то что надо, но не может прожевать кириллицу (я его дёргал с помощью ffi из lua, возможно где то накосячил)

ну собсно и всё, больше ничего подходящего не нашел.

Подскажите плз, может есть какое то простое решение?

★★

что бы экранировало не все символы подряд, а в зависимости от того, в какой части URL они находятся

А как это вообще выглядит? Где идёт выборочное экранирование? Если что-то экранируется оно должно всё экранироваться, а не выборочно. Или я чего не понимаю может конечно.

Может дешевле будет не сам URL целиком обрабатывать, а именно эти кусочки тем же ngx.encode_args отдельные и всё потом конкатенировать вместе.

https://github.com/openresty/lua-nginx-module#ngxencode_args

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Озадачился - я был уверен что есть разница, но сходу в rfc не нашел подтверждения, нужно вчитываться. Из того что приходит на ум - после фрагмента (`#`), кажется, экранируются все символы. Хотя сейчас пробежался по rfc и не нашел там ничего такого, только про символы в общем, нужно ещё раз перепроверить. В любом случае вопрос актуален, т.к. обе две найденные функции что то да не экранируют

Насчёт кусочков url - это же нужно его парсить руками, хотелось бы обойтись без этого).

psh ★★
() автор топика
Ответ на: комментарий от psh

экранируются все символы

Ну и пусть =) типичная ссылка с википедии

https://ru.wikipedia.org/wiki/%D0%90%D1%82%D0%BE%D0%BC#%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%BD%D1%8F%D1%82%D0%B8%D1%8F

https://ru.wikipedia.org/wiki/Атом#История_становления_понятия

И всё норм =) Ладно, я наверное не в теме просто.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Про разные символы я похоже придумал (в обсуждении где то натыкался, и не то ли неправильно понял, то ли ерунду услышал). Добавил RFC на верх списка для чтения:)

psh ★★
() автор топика

Во всех частях одинаково надо экранировать. Только экранировать надо не урл целиком, а отдельно урл, отдельно get-параметры и отдельно то что после #. Потому как иначе нет способа однозначно сообщить, где эти куски расположены. Например, неэкранированный знак вопроса - это начало get-параметров, а экранированный - часть имени файла.

firkax ★★★★★
()
Ответ на: комментарий от firkax

Но при этом знак вопроса внутри параметров и фрагмента не рекомендуется экранировать (но, типа, и не запрещается). В общем почитал rfc - там всё не так просто.

psh ★★
() автор топика