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

Canales RSS

Lo más fresco

  1. Enlaces sobre desarrollo web Modificado
  2. Cadena aleatoria en PHP Modificado
  3. Recortar texto Nuevo

Sugerencias del chef

Lo más visitado

  1. Canales RSS
  2. Formato condicional según el día de la semana
  3. Enlaces sobre desarrollo web
  4. Recortar texto
  5. Convertir de minutos a horas
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 jueves 13 de agosto de 2026 (17:05:31 +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-2026 by Álvaro González (alvaro.es) • Burgos (España) • borrame.com