function UTF8StringToArray($str)
{
$out = array();
$len = strlen($str);
for ($i = 0; $i < $len; $i++) {
$uni = -1;
$h = ord($str[$i]);
if ($h <= 0x7f) {
$uni = $h;
} elseif ($h >= 0xc2) {
if ($h <= 0xdf && $i < $len - 1) {
$uni = ($h & 0x1f) << 6 | ord($str[++$i]) & 0x3f;
} elseif ($h <= 0xef && $i < $len - 2) {
$uni = ($h & 0xf) << 12 | (ord($str[++$i]) & 0x3f) << 6 | ord($str[++$i]) & 0x3f;
} elseif ($h <= 0xf4 && $i < $len - 3) {
$uni = ($h & 0xf) << 18 | (ord($str[++$i]) & 0x3f) << 12 | (ord($str[++$i]) & 0x3f) << 6 | ord($str[++$i]) & 0x3f;
}
}
if ($uni >= 0) {
$out[] = $uni;
}
}
return $out;
}