对 Lua 的 string.format 进行转义字符串处理。

我有一个字符串需要添加一个变量,所以我使用 string.format 方法,但字符串中也包含符号 "%20"(不确定它代表什么,可能是空格或其他东西)。无论如何,由于字符串包含多个 "%",我只想将变量添加到第一个以设置 ID,有没有一种方法可以在这些点处转义字符串或其他方法?

现在的状态是:

ID = 12345
string.format("id=%s&x=foo=&bar=asd%20yolo%20123-1512", ID)

我收到了 bad argument # 3 to 'format'(no value) 的错误--因为它还需要传递3个变量。

点赞
用户2634887
用户2634887

你可以使用另一个 % 来转义一个 %,例如 string.format("%%20") 将得到 %20

2013-08-08 13:38:58
用户107090
用户107090

下面的代码将转义所有的 URL 转义字符(即,% 之后跟着数字):

ID=12345
f="id=%s&x=foo=&bar=asd%20yolo%20123-1512"
f=f:gsub("%%%d","%%%1")
print(string.format(f,ID))
2013-08-08 13:41:06
用户1009479
用户1009479

与许多其他语言不同,Lua 使用 % 来转义以下魔法字符:

( ) . % + - * ? [ ] ^ $
2013-08-08 14:04:57
用户204011
用户204011

我看到你接受了一个答案,但实际上,在真实应用中,这种情况几乎不应该发生。您应该尽量避免将模式与其他数据混合使用。

如果您有这样一个字符串:x=foo=&bar=asd%20yolo%20123-1512,并且您要使用string.format将ID部分前置,则应使用以下内容:

s = "x=foo=&bar=asd%20yolo%20123-1512"
ID = 12345
string.format("id=%d&%s", ID, s)

(注意:我使用了%d,因为您的ID是一个数字,所以在这种情况下它是首选%s。)

2013-08-08 14:51:09