Не удалось скомпилировать PHP preg_replace (): отсутствует) - PullRequest
1 голос
/ 17 июля 2009

У меня есть следующая функция, чтобы вернуть чистый путь для скрипта.

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 выдает ошибку:

Предупреждение : preg_replace () [function.preg-replace]: компиляция Ошибка: отсутствует) по смещению 7 в C: \ wamp \ www \ extlogin \ app \ ni \ inc \ classes \ cfiletree.php в строке 18

Есть идеи о том, что не так и как это исправить?

Спасибо.

1 Ответ

8 голосов
/ 17 июля 2009

Скорее всего, DIRECTORY_SEPARATOR равно \, что означает, что он будет экранировать ), а не соответствовать обратной косой черте. Вам нужно экранировать DIRECTORY_SEPARATOR, чтобы оно стало \\ в регулярном выражении.

Самый безопасный способ избежать строк, помещенных в регулярные выражения, - это использовать preg_quote:

preg_quote(DIRECTORY_SEPARATOR, '#');

Второй аргумент, '#', - это разделитель, который вы используете для своего регулярного выражения, в вашем случае это #.

...