/** * @access private * @static */ private static function _bdecodeRecursive($encodedStr, &$pos) { $encodedStrlen = strlen($encodedStr); if ($pos < 0 || $pos >= $encodedStrlen) { return NULL; } else { if ($encodedStr[$pos] == 'i') { $pos++; $numlen = strspn($encodedStr, '-0123456789', $pos); $spos = $pos; $pos += $numlen; if ($pos >= $encodedStrlen || $encodedStr[$pos] != 'e') { return NULL; } else { $pos++; return floatval(substr($encodedStr, $spos, $numlen)); } } elseif ($encodedStr[$pos] == 'd') { $pos++; $ret = array(); while ($pos < $encodedStrlen) { if ($encodedStr[$pos] == 'e') { $pos++; return $ret; } else { $key = Lms_BTransform::_bdecodeRecursive($encodedStr, $pos); if ($key === NULL) { return NULL; } else { $val = Lms_BTransform::_bdecodeRecursive($encodedStr, $pos); if ($val === NULL) { return NULL; } elseif (!is_array($key)) { $ret[$key] = $val; } } } } return NULL; } elseif ($encodedStr[$pos] == 'l') { $pos++; $ret = array(); while ($pos < $encodedStrlen) { if ($encodedStr[$pos] == 'e') { $pos++; return $ret; } else { $val = Lms_BTransform::_bdecodeRecursive($encodedStr, $pos); if ($val === NULL) { return NULL; } else { $ret[] = $val; } } } return NULL; } else { $numlen = strspn($encodedStr, '0123456789', $pos); $spos = $pos; $pos += $numlen; if ($pos >= $encodedStrlen || $encodedStr[$pos] != ':') { return NULL; } else { $vallen = intval(substr($encodedStr, $spos, $numlen)); $pos++; $val = substr($encodedStr, $pos, $vallen); if (strlen($val) != $vallen) { return NULL; } else { $pos += $vallen; return $val; } } } } }