borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Cadena aleatoria en PHP Modificado
  2. Recortar texto Nuevo

Sugerencias del chef

Compartir esta página

escapeshellarg() multiplataforma

La función escapeshellarg() sólo funciona correctamente en Linux/Unix. En Windows puede dañar los parámetros que recibe ya que a veces se dedica a eliminar caracteres en lugar de codificarlos. La siguiente función afronta la tarea con (esperemos) más acierto:

/** * Versión de escapeshellarg() que funciona también en Windows * * @param string $arg Argumento para la línea de comandos * @return string * * @version 2014-05-21 */ function escape_shell_arg($arg){     if( PHP_SHLIB_SUFFIX==='dll' && $arg!=='' ){         $salida = '';         foreach( preg_split('/([%"])/ui', $arg, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE) as $fragmento){             if( $fragmento==='"' ){                 $salida .= '\\"';             }elseif( $fragmento==='%' ){                 $salida .= '^%';             }else{                 $salida .= escapeshellarg($fragmento);             }         }         return $salida;     }else{         return escapeshellarg($arg);     } }

Ejemplos

Original
Completado el 90% del total ("OK")
Función nativa
"Completado el 90 del total ( OK )"
Función propia
""Completado el 90"^%" del total ("\""OK"\"")"

Podemos determinar si el resultado es correcto comparando la cadena original con la recibida por el comando ejecutado. P.ej.:

<?php // comando.php if($argc>0){     echo $argv[1]; }
<?php // prueba.php // [...] $original = 'Completado el 90% del total ("OK")'; $comando = 'php comando.php ' . escape_shell_arg($original); $recibido = `$comando`; echo $original===$recibido ? 'OK' : 'ERROR';
C:\>php prueba.php OK

En particular, probar estas cosas con el comando echo de Windows no suele salir bien.

Referencias

Esta página ha sido impresa el viernes 26 de abril de 2024 (01:53:43 +0200) desde https://borrame.com/recortes/php/escape-shell-arg.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

Lorem ipsum dolor sit amet.

© 2005-2024 by Álvaro González (alvaro.es) • Burgos (España) • borrame.com