Вы можете использовать декодер UTF-8 iconv
, чтобы избежать необходимости писать его самостоятельно:
function utf8_to_codepoints($s) {
return unpack('V*', iconv('UTF-8', 'UCS-4LE', $s));
}
$data= "Caf\xc3\xa9 \xe6\x97\xa5\xe6\x9c\xac \xf0\x9d\x84\x9e"; // Café 日本 ?
var_export(utf8_to_codepoints($data));
дает:
array (
1 => 67,
2 => 97,
3 => 102,
4 => 233,
5 => 32,
6 => 26085,
7 => 26412,
8 => 32,
9 => 119070,
)
, который можно преобразовать в формат U + nnnn с помощью dechex
.