La compilación de PHP preg_replace() falló:desaparecido )
-
16-09-2019 - |
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.
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 #
.