在boost :: fs :: path中转义空格

时间:2017-01-22 12:29:28

标签: c++ boost escaping whitespace boost-filesystem

它在锡上说的是什么。是否有更聪明的方法来替换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会将空格解释为分隔符,因此我的字符串将被切割成多个符号。用双引号括起来是不行的,我甚至不确定逃避空白区域,但是值得一试。

1 个答案:

答案 0 :(得分:0)

最聪明的方法就是不要这样做。

例如,使用execve而不是system(因此您可以在数组中传递参数,不需要shell转义)。参见例如How can I escape variables sent to the 'system' command in C++?

或者,如果您是与数据库服务器通信,不要连接您的查询,而是将参数绑定到预准备语句中。同样,这排除了任何逃避的需要。

避免转义避免了一大堆安全问题(RCE,SQLi等)

如果你必须,可能只是做

 "'" + replace_all(path.string(), "'", "''") + "'"

这对于例如bash炮弹

除此之外,找出哪些字符需要转义并使用适合目标的现有库函数,例如