2009-07-17 58 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