sqlite 关于 string 类型的数据需要转义。
通过查找规则,可以很容易通过switch拼装一个字符串来搞定。 大致规则是,单引号和双引号要变成两个,其他特殊字符为前面加上’/’。
C语言实现如下:
char *str_escape(const char *str) {
static char dest[1024];
int i;
int j = 0;
int len = strlen(str);
for (i = 0; i < len; i++) {
switch (str[i]) {
case '\'':
case '\"':
dest[j] = dest[j + 1] = str[i];
j += 2;
break;
case '/':
case '[':
case ']':
case '%':
case '&':
case '_':
case '(':
case ')':
dest[j] = '/';
j++;
default:
dest[j] = str[i];
j++;
}
}
dest[j] = '\0';
return dest;
}
看起来很好很强大。
又手贱 google 了下更多相关信息,发现前面那个函数可以替换为如下:
inline char *str_escape(const char *str) { //
return sqlite3_mprintf("%q", str);
}
没错,人家已经给了系统函数了。
1 Comment
Leniy · April 16, 2013 at 09:12
哇咔咔