/** * parse pdu string * @param \Data $data * @return array [decded text, text size, self object] * @throws Exception */ public static function parse(Data $data) { $alphabet = $data->getPdu()->getDcs()->getTextAlphabet(); $header = NULL; $length = $data->getPdu()->getUdl() * ($alphabet == PDU\DCS::ALPHABET_UCS2 ? 4 : 2); if ($data->getPdu()->getType()->getUdhi()) { PDU::debug("Header::parse()"); $header = Header::parse(); } $hex = PDU::getPduSubstr($length); PDU::debug("Data (hex): " . $hex); switch ($alphabet) { case PDU\DCS::ALPHABET_DEFAULT: PDU::debug("Helper::decode7bit()"); $text = PDU\Helper::decode7bit($hex); break; case PDU\DCS::ALPHABET_8BIT: PDU::debug("Helper::decode8bit()"); $text = PDU\Helper::decode8bit($hex); break; case PDU\DCS::ALPHABET_UCS2: PDU::debug("Helper::decode16Bit()"); $text = PDU\Helper::decode16Bit($hex); break; default: throw new Exception("Unknown alpabet"); } $size = mb_strlen($text, 'UTF-8'); $self = new self($data, $hex, $size, $header ? $header->toArray() : NULL); $self->_text = $text; return array($text, $size, $self); }