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

Есть ли способ поймать эту конкретную ошибку, то есть вы можете «проверить» образец перед его использованием? –

Смежные вопросы