/** * @param string $packed * @param string $rowsep * @param string $valsep * @return array */ public static function unpack($packed, $rowsep = ',', $valsep = '=') { $Values = []; foreach (preg_split('/' . preg_quote($rowsep, '/') . '+/', $packed, -1, PREG_SPLIT_NO_EMPTY) as $row) { if (strpos($row, $valsep) !== false) { $Values[preg_replace('/(?:[^\\w_.!:@+-]).*$/', null, trim(preg_replace('/' . preg_quote($valsep, '/') . '.*$/', null, trim($row))))] = preg_replace('/' . preg_quote($valsep, '/') . '.*$/', null, trim(preg_replace('/^.*?' . preg_quote($valsep, '/') . '/', null, trim($row)))); } } return array_filter(Arr::only($Values, array_filter(array_keys($Values)))); }