我有以下函数来返回脚本的干净路径。
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]:编译 失败:失踪)在 C:\ wamp \ www \ \ textlogin \ app \ ni \ inc \ classes \ cfiletree.php 的偏移7处 18
关于什么是错的以及如何解决它的任何想法?
谢谢。
答案 0 :(得分:8)
最有可能DIRECTORY_SEPARATOR
是\
,这意味着它将逃脱)
而不是匹配反斜杠。您需要转义DIRECTORY_SEPARATOR
,使其在正则表达式中变为\\
。
转义正则表达式中字符串的最安全方法是使用preg_quote
:
preg_quote(DIRECTORY_SEPARATOR, '#');
第二个参数'#'
是您用于正则表达式的分隔符,在您的情况下为#
。