所以我一直在寻找最简单、最有效的方法来为我的应用程序在 SQLite 中逃避恶意字符串。这里的大多数答案通常都有正则表达式路线。我偶然发现了一个找到sqlEscapeString的答案。
有一个问题。当它转义它时,它似乎也在字符串的末尾添加了单引号,所以它从 this:Test's
到: 'Test''s'
。现在我真的不知道它为什么会这样做,但我希望有人能对 Android 中存在的新功能起到相反的作用。DatabaseUtils
似乎没有它的伴侣功能。
所以我一直在寻找最简单、最有效的方法来为我的应用程序在 SQLite 中逃避恶意字符串。这里的大多数答案通常都有正则表达式路线。我偶然发现了一个找到sqlEscapeString的答案。
有一个问题。当它转义它时,它似乎也在字符串的末尾添加了单引号,所以它从 this:Test's
到: 'Test''s'
。现在我真的不知道它为什么会这样做,但我希望有人能对 Android 中存在的新功能起到相反的作用。DatabaseUtils
似乎没有它的伴侣功能。
我想说防止恶意字符串的最有效方法是让 SQLite 完成这项工作。Android 包装了该功能并使用ContentValues
、 String[]
或Object[]
参数,具体取决于您用于查询数据库的方法,以保存转义值。:
在使用上述方法时,?
在你的 SQL 语句中放置一个你想要转义的字符串。
我为反向 sqlEscapeString() 创建了一个 unescape() 方法。
public String unescapeString(String string) {
if (string == null)
return null;
StringBuilder sb = new StringBuilder(string);
sb = sb.deleteCharAt(0);
sb = sb.deleteCharAt(sb.length() - 1);
return sb.toString().replaceAll("''", "'");
}