code: public function decode($text)
      {
          $bom = chr(0xEF) . chr(0xBB) . chr(0xBF);
          if (Strings::startsWith($text, $bom)) {
              return $this->decode(substr($text, 3));
          }
          
          $context = new Utf8Context($text);
          $result  = array();
          while ($context->hasNext()) {
              $result[] = $context->next();
          }
          
          // 文字列の末尾に不正な文字が存在していた場合,
          // $result の最後の要素に null が代入されるので取り除く
          $count = count($result);
          if ($count && $result[$count - 1] === null) {
              array_pop($result);
          }
          return $result;
      }
docs: 指定された UTF-8 の文字列を Unicode 符号点の配列に変換します.
  
  @param  string $text UTF-8 でエンコードされた文字列
  @return array        Unicode 符号点の配列