Hein de Kock
Hein de Kock

Reputation: 21

Lua gsub chars '(' and ')' fails

For some reason only the open and close bracket wont work, all others are fine.

RequestEncoded = string.gsub(RequestEncoded, '<', ' ')
RequestEncoded = string.gsub(RequestEncoded, '>', ' ')
RequestEncoded = string.gsub(RequestEncoded, '"', ' ')
RequestEncoded = string.gsub(RequestEncoded, '\'', ' ')
RequestEncoded = string.gsub(RequestEncoded, '\\', ' ')
--  RequestEncoded = string.gsub(RequestEncoded, '(', ' ') keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, ')', ' ')
--  RequestEncoded = string.gsub(RequestEncoded, "\x28", " ") --keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, "\x29", ' ')
--  RequestEncoded = string.gsub(RequestEncoded, '\050', ' ') --keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, '\051', ' ')

Upvotes: 2

Views: 653

Answers (1)

Wiktor Stribiżew
Wiktor Stribiżew

Reputation: 626926

) and ( are special characters that form a capturing group in a Lua pattern.

You need to escape them when they are outside of square brackets, [...], to match literal parentheses. You need to escape them with %.

string.gsub(RequestEncoded, '%(', ' ')
string.gsub(RequestEncoded, '%)', ' ')

However, since you are using the same replacement pattern in all the subsequent gsub calls, you may simplify your code to

RequestEncoded = string.gsub(RequestEncoded, '[<>"\'\\()]', ' ')

Note that here, () are inside a bracket expression and do not need escaping.

See Lua patterns docs:

Some characters, called magic characters, have special meanings when used in a pattern. The magic characters are

( ) . % + - * ? [ ^ $

Upvotes: 5

Related Questions