<?php
$string = 'πΆπ»';
echo '=== UTF-8 =============================', PHP_EOL;
echo 'STRING: ', $string, PHP_EOL;
echo 'CHARACTERS: ', mb_strlen($string), PHP_EOL; // 2
echo 'BYTE COUNT: ', strlen($string), PHP_EOL; // 8
foreach(range(0, mb_strlen($string) - 1) as $index) {
echo PHP_EOL;
echo 'CHARACTER #', $index + 1, ' CODE POINT: ', '0x', dechex(mb_ord(mb_substr($string, $index, 1))), PHP_EOL; // [0x1f476, 0x1f3fb]
echo 'CHARACTER #', $index + 1, ' BYTE COUNT: ', mb_strlen(mb_substr($string, $index, 1), '8bit'), PHP_EOL; // [4, 4]
}
echo '=======================================', PHP_EOL, PHP_EOL;
$string = mb_convert_encoding($string, 'UTF-16', 'UTF-8');
echo '=== UTF-16 ============================', PHP_EOL;
echo 'STRING: ', $string, PHP_EOL;
echo 'CHARACTERS: ', mb_strlen($string), PHP_EOL; // should be 2, is 4
echo 'BYTE COUNT: ', strlen($string), PHP_EOL; // should be 8, is 8
foreach(range(0, mb_strlen($string) - 1) as $index) {
echo PHP_EOL;
echo 'CHARACTER #', $index + 1, ' CODE POINT: ', '0x', dechex(mb_ord(mb_substr($string, $index, 1))), PHP_EOL; // should be [0x1f476, 0x1f3fb], is [0x0, 0x0, 0x0, 0x0]
echo 'CHARACTER #', $index + 1, ' BYTE COUNT: ', mb_strlen(mb_substr($string, $index, 1), '8bit'), PHP_EOL; // should be [4, 4], is [2, 2, 2, 2]
}
echo '=======================================', PHP_EOL;
preferences:
59.45 ms | 402 KiB | 5 Q