2013-08-08 12 views
6

Ho una stringa Ho bisogno di aggiungere una variabile in modo da utilizzare il metodo string.format, ma la stringa contiene anche il simbolo "%20" (non so cosa rappresenta, probabilmente uno spazio bianco o qualcosa del genere) . Comunque dato che la stringa contiene più "%" e voglio solo aggiungere la variabile al primo per impostare l'id, c'è un modo per sfuggire alla stringa in corrispondenza dei punti o qualcosa del genere?stringa di escape per Lua's string.format

come è ora:

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

ricevo bad argument #3 to 'format' (no value). errore - in quanto si aspetta 3 variabili da passare.

risposta

5

È possibile sfuggire a un % con un altro %, ad es. string.format("%%20") darà %20

+0

perfetto, esattamente quello che stavo cercando – user1593846

1

Il codice qui sotto escape tutti gli escape URL (ossia,% seguito da una cifra):

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

Perché "%%% 1' non genera errori? Non ci sono sottostringhe catturate qui. Solo '%%% 0' è possibile secondo il manuale Lua. –

+2

@EgorSkriptunoff, il manuale dice "se il pattern non specifica catture, allora si comporta come se l'intero pattern fosse all'interno di un'acquisizione". – lhf

3

A differenza di molte altre lingue, Lua utilizza % per sfuggire i seguenti caratteri magici:

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

Ho visto che hai accettato una risposta, ma in realtà, questa situazione non dovrebbe quasi mai accadere in un'applicazione reale. Dovresti cercare di evitare di mescolare i pattern con altri dati.

Se si dispone di una stringa come questa: x=foo=&bar=asd%20yolo%20123-1512 e si desidera anteporre la parte ID ad esso utilizzando string.format, si dovrebbe usare qualcosa di simile:

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

(Nota: Ho usato %d perché il vostro ID è un numero, quindi è preferibile a %s in questo caso.)