Сбой компиляции PHP preg_replace():пропавший без вести )

StackOverflow https://stackoverflow.com/questions/1142263

  •  16-09-2019
  •  | 
  •  

Вопрос

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

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() [функция.preg-заменить]:Сборник потерпел неудачу:отсутствует ) со смещением 7 в C:\wamp\www\extlogin\app i\inc\classes\cfiletree.php на линии 18

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

Спасибо.

Это было полезно?

Решение

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

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

preg_quote(DIRECTORY_SEPARATOR, '#');

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top