Lua: Ескейпиране на литерала % вътре в string.gsub и прихващането %2

Основен въпрос, но се опитвам да разбера от известно време без успех.

Обработвам URL адреси и трябва да направя проста замяна.

Трябва да заменя интервалите с литералния низ %20, но изглежда не мога да избягам от % или %2, което се докладва като невалидно улавяне.

text = string.gsub(text, "%s+", '%%20')

Колко % трябва да използвам вътре в gsub, за да избягам от знака % и %2 улавянето.


person manthis    schedule 26.08.2011    source източник
comment
Сигурни ли сте, че сте въвели %%20, а не %%%20?   -  person Stuart P. Bentley    schedule 27.08.2011


Отговори (2)


Изглежда, че работи за мен:

> text="hello world"
> print(string.gsub(text, "%s+", '%%20'))
hello%20world   1

Ще трябва да покажете още малко код и вашето съобщение за грешка.

person BMitch    schedule 26.08.2011
comment
Моя грешка, захранвах резултата от заместването на string.format() и следователно знакът % ме спасяваше в този момент. Благодаря за вашата помощ. Оставям следното за справка за този въпрос за начинаещи. pgl.yoyo.org/luai/i/string.gsub - person manthis; 27.08.2011

Като алтернатива можете да направите това автоматично със следното:

url = require("socket.url")
text = url.escape(string)

Това, разбира се, е при условие, че имате библиотеката на сокетите във вашия lua път. За да бъда съвсем честен, това е начинът, по който бих се захванал да правя каквото и да е с url адреси, защото тогава не е нужно да се притеснявате за преобразуването на запетаи в %2c или апостроф в %27.

person Josh    schedule 29.08.2011
comment
о, добра информация, благодаря. Бих дал +1, но свърших за деня. - person John Riselvato; 22.10.2011