在 boost::fs::p ath 中转义空白

Escape white space in boost::fs::path

本文关键字:转义 ath 空白 boost fs      更新时间:2023-10-16

它在锡上说什么。有没有更聪明的方法可以替换不需要regex boost::fs::path中的空格?

编辑为例:

_appBundlePath = boost::fs::path("/path/with spaces/here");
regex space(" ");
string sampleFilename = regex_replace((_appBundlePath/"audio/samples/C.wav").string(), space, "\ ");

问题:有没有办法避免使用正则表达式?对我来说似乎有点矫枉过正。

编辑 2 我的问题是通过 libpd 将字符串传递给纯数据时。PD 会将空格解释为分隔符,因此我的字符串将被切成多个符号。用双引号括起来是行不通的,我什至不确定转义空格会不会,但值得一试。

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

例如,使用 execve 而不是 system(这样您就可以在数组中传递参数,而无需 shell 转义)。例如,请参阅如何转义发送到C++中"system"命令的变量?

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

避免

转义可以避免一系列安全问题(RCE、SQLi 等)


如果你必须,可能就做

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

例如,这将很好 bash贝壳

对于其他任何内容,找出哪些字符需要转义并使用适合目标的现有库函数,例如

  • http://en.cppreference.com/w/cpp/io/manip/quoted
  • https://dev.mysql.com/doc/refman/5.7/en/mysql-real-escape-string.html
  • 。等。