2009-07-17 3 views
1

스크립트의 깨끗한 경로를 반환하는 다음 함수가 있습니다. 잘못 어떻게 해결해야할지에 대한PHP preg_replace() 컴파일 실패 : 누락)

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

어떤 아이디어 :

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 오류를 준다?

감사합니다.

답변

8

대부분 DIRECTORY_SEPARATOR\입니다. 즉, 백 슬래시와 일치하지 않고 )에서 벗어날 것입니다. DIRECTORY_SEPARATOR을 이스케이프 처리하여 정규 표현식에서 \\이되도록해야합니다.

정규 표현식에 배치 문자열을 탈출하는 가장 안전한 방법은 preg_quote을 사용하는 것입니다

preg_quote(DIRECTORY_SEPARATOR, '#'); 

두 번째 인수, '#', 당신은 귀하의 경우 # 당신의 정규 표현식에 사용하는 구분이다.

+0

특정 오류를 잡을 방법이 있습니까? 예를 들어, 패턴을 사용하기 전에 패턴을 "테스트"할 수 있습니까? –