开发者

Regex for doubling single quotes in string

I would like a regex that would 开发者_如何转开发make this:

VALUES('Hit 'n Run')

into

VALUES('Hit ''n Run')

Is this possible?


No, this is not really possible. If you have VALUES('Hit 'n Run'), you already have an invalid mixture of delimiting apostrophes and literal apostrophes. String processing is like mixing sugar and salt: once you've mixed contexts without proper escaping there is no way of pulling them back apart.

If you are trying to rescue broken data, you could try something like (?<!\()'(?!\)) to match apostrophes that don't have a bracket next to them. It's a weak and easily fooled tactic but for simple data it might work.

If you are putting together dynamic SQL queries you must escape the ' before you put it into the query string, either using a simple string replace ' with '' if you're sure that's the only escape your DBMS requires, or — much better — using a dedicated SQL-string-literal-escaping function appropriate to your DBMS. Quite what that function would be depends on what platform (language, DBMS) you're talking about.


Any pattern that could be expressed in RegEx could then be exploited to create the very SQL injection issues you're trying to avoid.

Example nasty input:

VALUES(');DELETE * FROM customer;SELECT '
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜