我需要在文件名中转义括号。目前我这样做如下:
$string = 'folder1/folder2/foldera/abc/myFile(2).jpg';
str_replace(')', '\)', str_replace('(', '\(', $string));
echo $string;
// outputs: folder1/folder2/foldera/abc/myFile\(2\).jpg
效率低,因为这是在数百个结果的循环中执行的。是否有更好,更清洁,更有效的方法来实现这一目标?
答案 0 :(得分:1)
您可以使用数组将一次调用减少到str_replace()
。
str_replace(array(')', '('), array('\)', '\('), $string);
<强> P.S。 :另一个选项是preg_quote()
,但在您的情况下,您只想要转义(
和)
。 preg_quote()
将转义所有regex
个字符。
答案 1 :(得分:1)
我认为你正在寻找preg_quote:
$string = preg_quote($string);
或类似的东西:
$string = str_replace([')', '('], ['\\)', '\\('], $string);
答案 2 :(得分:1)
试试这个
$findstring = array('(',')');
$escpestring = array('\(','\)');
$string = 'folder1/folder2/foldera/abc/myFile(2).jpg';
$output = str_replace($findstring,$escpestring,$string);
echo $output;
答案 3 :(得分:0)
我想知道更好的功能是escapeshellcmd
(http://php.net/manual/en/function.escapeshellcmd.php)
以下字符前面有反斜杠:&amp;#;`| *?〜&lt;&gt; ^()[] {} $ \,\ x0A和\ xFF。 '和'只有在没有配对的情况下才会被转义。在Windows中,所有这些字符加%和!都会替换为空格。