Pregunta

Tengo la siguiente función para devolver una ruta limpia para un script.

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 da el error:

Advertencia:preg_replace() [función.preg-replace]:Compilación falló:faltante) en el desplazamiento 7 pulgadas C:\wamp\www\extlogin\app i\inc\classes\cfiletree.php en línea 18

¿Alguna idea sobre lo que está mal y cómo solucionarlo?

Gracias.

¿Fue útil?

Solución

Lo más probable es DIRECTORY_SEPARATOR \ lo que significa que va a escapar del lugar de ) coincide con una barra invertida. Tiene que escapar DIRECTORY_SEPARATOR para que se convierta en \\ la expresión regular.

La forma más segura de escapar de las cadenas colocadas en las expresiones regulares es utilizar preg_quote:

preg_quote(DIRECTORY_SEPARATOR, '#');

El segundo argumento, '#', es el separador que utiliza para su expresión regular, que en su caso es #.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top