文件路径转义符引发的问题
需求问题描述:文件路径在存储到数据库时‘\’就变没了,比如:“D:\abc\123.jpg”,经过C++语言的转义就变成“D:\abc\123.jpg”,在存到数据库里,这个过程mysql又会进行一次转义,结果‘\’就变没了。
- 解决方案
1.将’\’转换成”\\”
C++的string提供了replace方法来实现字符串的替换,但是对于将字符串中某个字符串全部替换这个功能,string并没有实现,我们今天来做的就是这件事。
首先明白一个概念,即string替换所有字符串,将”12212”这个字符串的所有”12”都替换成”21”,结果是什么?
可以是22211,也可以是21221,有时候应用的场景不同,就会希望得到不同的结果,所以这两种答案都做了实现,代码如下:
`#include <string>
#include <iostream>
using namespace std;
string& replace_all(string& str,const string& old_value,const string& new_value)
{
while(true)
string::size_type pos(0);
if( (pos=str.find(old_value))!=string::npos )
str.replace(pos,old_value.length(),new_value);
else break;
}
return str;
}
string& replace_all_distinct(string& str,const string& old_value,const string& new_value)
{
for(string::size_type pos(0); pos!=string::npos; pos+=new_value.length()) {
if( (pos=str.find(old_value,pos))!=string::npos )
str.replace(pos,old_value.length(),new_value);
else break;
}
return str;
}
int main()
{
cout << replace_all(string(“12212”),”12”,”21”) << endl;
cout << replace_all_distinct(string(“12212”),”12”,”21”) << endl;
}
`
mysql关键字escape语法
like mode escape char
select ‘/’ like ‘//’ escape ‘/’
查询结果为1
将字符作为表中的字段的值,查询方式如下
select name like ‘//’ escape ‘/’
当name=‘/‘时结果也是0。
后来发现,当在mysql执行查询时,如果自己定义了escape字符,那么就应该注意几点
1、查询之前应当对like特殊字符及sql特殊字符进行转义(_%?’”“)。
2、如果转义后的mode中存在两个连续的转义字符,那么还应该在mode前面再次添加一个转义字符(在like特殊字符之后),如果添加后开头为两个连续的转义字符,那么还应该再加上一个特殊字符进行转义。
即上面改为select name like ‘///’ escape ‘/’查询结果就满足。
当然如果匹配模式为‘/’,立刻后面就会变成‘/////’了。