1

我有以下函数来返回脚本的干净路径。

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]: Compilation failed: missing ) 在第18C:\wamp\www\extlogin\app\ni\inc\classes\cfiletree.php中的偏移量 7

关于什么是错的以及如何解决它的任何想法?

谢谢你。

4

1 回答 1

8

最有可能DIRECTORY_SEPARATOR的是\这意味着它将逃避)而不是匹配反斜杠。您需要转义DIRECTORY_SEPARATOR,以便它成为\\正则表达式。

转义放置在正则表达式中的字符串的最安全方法是使用preg_quote

preg_quote(DIRECTORY_SEPARATOR, '#');

第二个参数 ,'#'是您用于正则表达式的分隔符,在您的情况下是#.

于 2009-07-17T09:32:34.860 回答