它在锡上说的是什么。是否有更聪明的方法来替换boost::fs::path
中不需要regex
的空格?
编辑作为示例:
_appBundlePath = boost::fs::path("/path/with spaces/here");
regex space(" ");
string sampleFilename = regex_replace((_appBundlePath/"audio/samples/C.wav").string(), space, "\\ ");
问题:有没有办法避免使用正则表达式?对我来说似乎太过分了。
编辑2 我的问题是通过libpd将字符串传递给Pure Data时。 PD会将空格解释为分隔符,因此我的字符串将被切割成多个符号。用双引号括起来是不行的,我甚至不确定逃避空白区域,但是值得一试。
答案 0 :(得分:0)
最聪明的方法就是不要这样做。
例如,使用execve
而不是system
(因此您可以在数组中传递参数,不需要shell转义)。参见例如How can I escape variables sent to the 'system' command in C++?
或者,如果您是与数据库服务器通信,不要连接您的查询,而是将参数绑定到预准备语句中。同样,这排除了任何逃避的需要。
避免转义避免了一大堆安全问题(RCE,SQLi等)
如果你必须,可能只是做
"'" + replace_all(path.string(), "'", "''") + "'"
这对于例如bash
炮弹
除此之外,找出哪些字符需要转义并使用适合目标的现有库函数,例如