Сбой компиляции PHP preg_replace():пропавший без вести )
-
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, '#');
Второй аргумент, '#'
, это разделитель, который вы используете для вашего регулярного выражения, которое в вашем случае является #
.