2013-08-08 28 views
6

Tôi có một chuỗi Tôi cần phải thêm biến để tôi sử dụng phương thức string.format, nhưng chuỗi cũng chứa ký hiệu "%20" (không chắc chắn nó đại diện cho gì, có lẽ là khoảng trắng hay gì đó) . Dù sao kể từ khi chuỗi chứa nhiều "%" và tôi chỉ muốn thêm biến vào biến đầu tiên để đặt id, có cách nào để thoát khỏi chuỗi tại các điểm hay gì đó không?Chuỗi thoát cho chuỗi của Lua.format

Vì nó bây giờ là:

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

tôi nhận được bad argument #3 to 'format' (no value). lỗi - vì nó hy vọng 3 biến để được thông qua.

Trả lời

5

Bạn có thể thoát một số % bằng một số khác %, ví dụ: string.format("%%20") sẽ cho %20

+0

hoàn hảo, chính xác những gì tôi đang tìm kiếm – user1593846

1

Mã dưới đây thoát tất cả thoát URL (có nghĩa là,% theo sau là một chữ số):

ID=12345 
f="id=%s&x=foo=&bar=asd%20yolo%20123-1512" 
f=f:gsub("%%%d","%%%1") 
print(string.format(f,ID)) 
+0

Tại sao '%%% 1' không gây ra lỗi? Không có chất nền bị bắt ở đây. Chỉ có '%%% 0' là có thể theo hướng dẫn Lua. –

+2

@EgorSkriptunoff, hướng dẫn sử dụng cho biết "nếu mô hình chỉ định không có ảnh chụp, thì nó hoạt động như thể toàn bộ mẫu nằm bên trong một ảnh chụp". – lhf

3

Không giống như nhiều ngôn ngữ khác, Lua sử dụng % để thoát khỏi các nhân vật ma thuật sau đây:

() . % + - * ? [ ]^$ 
1

Tôi đã thấy bạn đã chấp nhận câu trả lời, nhưng thực sự, tình huống này hầu như không bao giờ xảy ra trong một ứng dụng thực tế. Bạn nên cố gắng tránh các mẫu trộn với các dữ liệu khác.

Nếu bạn có một chuỗi như thế này: x=foo=&bar=asd%20yolo%20123-1512 và bạn muốn thêm vào trước các phần ID để nó sử dụng string.format, bạn nên sử dụng một cái gì đó như thế này:

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

(Lưu ý: Tôi đã sử dụng %d vì ID của bạn là một số, vì vậy nó được ưa thích là %s trong trường hợp này.)

Các vấn đề liên quan