2009-07-17 122 views
1

我有以下函数为脚本返回一个干净的路径。PHP preg_replace()编译失败:缺失)

function cleanPath($path) { 
     $path = (string) $path; 
     $path = preg_replace(
      array(
      '#[\n\r\t\0]*#im', 
      '#/(\.){1,}/#i', 
      '#(\.){2,}#i', 
      '#(\.){2,}#i', 
      '#('.DIRECTORY_SEPARATOR.'){2,}#i' 
      ), 
      array(
      '', 
      '', 
      '', 
      '/' 
      ), 
      $path 
      ) 
     ; 
     return rtrim($path,DIRECTORY_SEPARATOR); 
    } 

PHP提供了错误:

Warning: preg_replace() [function.preg-replace]: Compilation failed: missing) at offset 7 in C:\wamp\www\extlogin\app\ni\inc\classes\cfiletree.php on line 18

不好的事,以及如何解决它的任何想法?

谢谢。

回答

8

最有可能的DIRECTORY_SEPARATOR\这意味着它将跳过)而不是匹配反斜杠。您需要转义DIRECTORY_SEPARATOR,以便它在正则表达式中变为\\

逃脱放置在正则表达式的字符串最安全的方法是使用preg_quote

preg_quote(DIRECTORY_SEPARATOR, '#'); 

第二个参数,'#',是你用你的正则表达式,你的情况是#的分隔符。

+0

有没有办法捕捉到这个特定的错误,即你可以在使用它之前“测试”一个模式? – 2013-02-19 09:05:22