Skip to content

Instantly share code, notes, and snippets.

@gerriet-hinrichs
Last active May 9, 2016 15:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gerriet-hinrichs/a748e534c9e1981ec65e7d4a8fe76752 to your computer and use it in GitHub Desktop.
Save gerriet-hinrichs/a748e534c9e1981ec65e7d4a8fe76752 to your computer and use it in GitHub Desktop.
Small php function that parses the argv array from a string.
<?php
function parse ($cmd)
{
$out = array();
$escape = '';
$buffer = '';
$last = '';
$i = 0;
while (empty($char = mb_substr($cmd, $i++, 1)) === false)
{
switch ($char)
{
case '\\':
if ($last === '\\')
{
$buffer .= '\\';
}
break;
case '\'':
if ($escape === '\'' && $last !== '\\')
{
$out[] = $buffer;
$buffer = '';
$escape = '';
}
elseif ($escape === '')
{
$escape = '\'';
}
else
{
$buffer .= $char;
}
break;
case '"':
if ($escape === '"' && $last !== '\\')
{
$out[] = $buffer;
$buffer = '';
$escape = '';
}
elseif ($escape === '')
{
$escape = '"';
}
else
{
$buffer .= $char;
}
break;
case ' ':
if ($escape === '' && $last !== '\\')
{
if ($buffer !== '')
{
$out[] = $buffer;
$buffer = '';
}
}
else
{
$buffer .= $char;
}
break;
default:
if ($char !== '\\')
{
if ($last === '\\')
{
$buffer .= '\\';
}
$buffer .= $char;
}
break;
}
$last = $char;
}
if ($buffer !== '')
{
$out[] = $buffer;
}
return $out;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment