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]: コンパイルに失敗しました: C:\wamp\www\extlogin\app\ni\inc\classes\cfiletree.phpの18行 目のオフセット 7 に ) がありません

何が問題で、どのように修正するかについてのアイデアはありますか?

ありがとうございました。

4

1 に答える 1

8

最も可能性DIRECTORY_SEPARATORが高いのは、バックスラッシュに一致するのではなく、\エスケープすることを意味します。正規表現になるよう)にエスケープする必要があります。DIRECTORY_SEPARATOR\\

正規表現に配置された文字列をエスケープする最も安全な方法は、次を使用することpreg_quoteです。

preg_quote(DIRECTORY_SEPARATOR, '#');

2 番目の引数 は'#'、正規表現に使用する区切り記号です。この場合は#です。

于 2009-07-17T09:32:34.860 に答える