3v4l.org

run code in 300+ PHP versions simultaneously
<?php $string = '🇷🇴'; echo '=== UTF-8 =============================', PHP_EOL; echo 'STRING: ', $string, PHP_EOL; echo 'CHARACTERS: ', mb_strlen($string), PHP_EOL; // 2 echo 'BYTE COUNT: ', mb_strlen($string, '8bit'), 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; // [0x1f1f7, 0x1f1f4] 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 [0x1f1f7, 0x1f1f4], 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;
Output for 8.3.2 - 8.3.4, 8.3.6
=== UTF-8 ============================= STRING: 🇷🇴 CHARACTERS: 2 BYTE COUNT: 8 CHARACTER #1 CODE POINT: 0x1f1f7 CHARACTER #1 BYTE COUNT: 4 CHARACTER #2 CODE POINT: 0x1f1f4 CHARACTER #2 BYTE COUNT: 4 ======================================= === UTF-16 ============================ STRING: �<��<�� CHARACTERS: 8 BYTE COUNT: 8 CHARACTER #1 CODE POINT: 0x3f CHARACTER #1 BYTE COUNT: 1 CHARACTER #2 CODE POINT: 0x3c CHARACTER #2 BYTE COUNT: 1 CHARACTER #3 CODE POINT: 0x3f CHARACTER #3 BYTE COUNT: 1 CHARACTER #4 CODE POINT: 0x3f CHARACTER #4 BYTE COUNT: 1 CHARACTER #5 CODE POINT: 0x3f CHARACTER #5 BYTE COUNT: 1 CHARACTER #6 CODE POINT: 0x3c CHARACTER #6 BYTE COUNT: 1 CHARACTER #7 CODE POINT: 0x3f CHARACTER #7 BYTE COUNT: 1 CHARACTER #8 CODE POINT: 0x3f CHARACTER #8 BYTE COUNT: 1 =======================================
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 === UTF-8 ============================= STRING: 🇷🇴 CHARACTERS: 2 BYTE COUNT: 8 CHARACTER #1 CODE POINT: 0x1f1f7 CHARACTER #1 BYTE COUNT: 4 CHARACTER #2 CODE POINT: 0x1f1f4 CHARACTER #2 BYTE COUNT: 4 ======================================= === UTF-16 ============================ STRING: �<��<�� CHARACTERS: 8 BYTE COUNT: 8 CHARACTER #1 CODE POINT: 0x3f CHARACTER #1 BYTE COUNT: 1 CHARACTER #2 CODE POINT: 0x3c CHARACTER #2 BYTE COUNT: 1 CHARACTER #3 CODE POINT: 0x3f CHARACTER #3 BYTE COUNT: 1 CHARACTER #4 CODE POINT: 0x3f CHARACTER #4 BYTE COUNT: 1 CHARACTER #5 CODE POINT: 0x3f CHARACTER #5 BYTE COUNT: 1 CHARACTER #6 CODE POINT: 0x3c CHARACTER #6 BYTE COUNT: 1 CHARACTER #7 CODE POINT: 0x3f CHARACTER #7 BYTE COUNT: 1 CHARACTER #8 CODE POINT: 0x3f CHARACTER #8 BYTE COUNT: 1 =======================================
Output for 8.3.0 - 8.3.1
=== UTF-8 ============================= STRING: 🇷🇴 CHARACTERS: 2 BYTE COUNT: 8 CHARACTER #1 CODE POINT: 0x1f1f7 CHARACTER #1 BYTE COUNT: 4 CHARACTER #2 CODE POINT: 0x1f1f4 CHARACTER #2 BYTE COUNT: 4 ======================================= === UTF-16 ============================ STRING: �<��<�� CHARACTERS: 8 BYTE COUNT: 8 CHARACTER #1 CODE POINT: 0x0 CHARACTER #1 BYTE COUNT: 2 CHARACTER #2 CODE POINT: 0x0 CHARACTER #2 BYTE COUNT: 2 CHARACTER #3 CODE POINT: 0x0 CHARACTER #3 BYTE COUNT: 2 CHARACTER #4 CODE POINT: 0x0 CHARACTER #4 BYTE COUNT: 2 CHARACTER #5 CODE POINT: 0x Fatal error: Uncaught ValueError: mb_ord(): Argument #1 ($string) must not be empty in /in/DrEcL:26 Stack trace: #0 /in/DrEcL(26): mb_ord('') #1 {main} thrown in /in/DrEcL on line 26
Process exited with code 255.
Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18
=== UTF-8 ============================= STRING: 🇷🇴 CHARACTERS: 2 BYTE COUNT: 8 CHARACTER #1 CODE POINT: 0x1f1f7 CHARACTER #1 BYTE COUNT: 4 CHARACTER #2 CODE POINT: 0x1f1f4 CHARACTER #2 BYTE COUNT: 4 ======================================= === UTF-16 ============================ STRING: �<��<�� CHARACTERS: 4 BYTE COUNT: 8 CHARACTER #1 CODE POINT: 0x0 CHARACTER #1 BYTE COUNT: 2 CHARACTER #2 CODE POINT: 0x0 CHARACTER #2 BYTE COUNT: 2 CHARACTER #3 CODE POINT: 0x0 CHARACTER #3 BYTE COUNT: 2 CHARACTER #4 CODE POINT: 0x0 CHARACTER #4 BYTE COUNT: 2 =======================================

preferences:
168.57 ms | 404 KiB | 176 Q