我有以下函数来返回脚本的干净路径.
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);
}
Run Code Online (Sandbox Code Playgroud)
PHP给出错误:
警告:preg_replace()[function.preg-replace]:编译失败:丢失)在第18行的 C:\ wamp\www\extlogin\app \ni\inc\classes\cfiletree.php中的偏移量7处
关于什么是错的以及如何解决它的任何想法?
谢谢.
最有可能DIRECTORY_SEPARATOR的\意思是它会逃避)而不是匹配反斜杠.你需要逃脱,DIRECTORY_SEPARATOR以便它成为\\正则表达式.
转义正则表达式中的字符串的最安全的方法是使用preg_quote:
preg_quote(DIRECTORY_SEPARATOR, '#');
Run Code Online (Sandbox Code Playgroud)
第二个参数'#'是您用于正则表达式的分隔符,在您的情况下是#.