2009-07-17 8 views
1

J'ai la fonction suivante pour retourner un chemin propre pour un script.PHP preg_replace() compilation a échoué: manquant)

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 donne l'erreur:

Warning: preg_replace() [function.preg-replace]: Compilation failed: missing) at offset 7 in C:\wamp\www\extlogin\app\ni\inc\classes\cfiletree.php on line 18

Toutes les idées sur ce qui ne va pas et comment y remédier?

Merci.

Répondre

8

Probablement DIRECTORY_SEPARATOR est \ ce qui signifie qu'il va échapper le ) plutôt que de faire correspondre une barre oblique inverse. Vous devez échapper DIRECTORY_SEPARATOR pour qu'il devienne \\ dans l'expression régulière.

La meilleure façon d'échapper à des chaînes placées dans les expressions régulières est d'utiliser preg_quote:

preg_quote(DIRECTORY_SEPARATOR, '#'); 

Le second argument, '#', est le séparateur que vous utilisez pour votre expression régulière, ce qui dans votre cas est #.

+0

Existe-t-il un moyen d'intercepter cette erreur particulière, c'est-à-dire que vous pouvez "tester" un modèle avant de l'utiliser? –

Questions connexes