转义字符串

时间:2015-12-10 10:09:39

标签: php regex str-replace

我需要在文件名中转义括号。目前我这样做如下:

$string = 'folder1/folder2/foldera/abc/myFile(2).jpg';

str_replace(')', '\)', str_replace('(', '\(', $string));

echo $string;

// outputs: folder1/folder2/foldera/abc/myFile\(2\).jpg 

效率低,因为这是在数百个结果的循环中执行的。是否有更好,更清洁,更有效的方法来实现这一目标?

4 个答案:

答案 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)

我想知道更好的功能是escapeshellcmdhttp://php.net/manual/en/function.escapeshellcmd.php

  

以下字符前面有反斜杠:&amp;#;`| *?〜&lt;&gt; ^()[] {} $ \,\ x0A和\ xFF。 '和'只有在没有配对的情况下才会被转义。在Windows中,所有这些字符加%和!都会替换为空格。