文件路径中转义符的问题

在存储文件路径到数据库时遇到''被转义消失的问题。通过在C++中使用replace方法将'」转换为'\",并讨论了MySQL的LIKE关键字和ESCAPE语法,强调了查询前对特殊字符的转义处理,以及如何处理连续转义字符的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件路径转义符引发的问题

需求问题描述:文件路径在存储到数据库时‘\’就变没了,比如:“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 ‘/’查询结果就满足。

当然如果匹配模式为‘/’,立刻后面就会变成‘/////’了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShineSpark

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值