3v4l.org

run code in 500+ PHP versions simultaneously
<?php $string = '😀'; echo '=== UTF-8 =============================', PHP_EOL; echo 'STRING: ', $string, PHP_EOL; echo 'CHARACTERS: ', mb_strlen($string), PHP_EOL; // 1 echo 'BYTE COUNT: ', mb_strlen($string, '8bit'), PHP_EOL; // 4 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; // [0x1f600] echo 'CHARACTER #', $index + 1, ' BYTE COUNT: ', mb_strlen(mb_substr($string, $index, 1), '8bit'), PHP_EOL; // 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 1, is 2 echo 'BYTE COUNT: ', strlen($string), PHP_EOL; // shold be 4, is 4 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 [0x1f600], is [0x0, 0x0] echo 'CHARACTER #', $index + 1, ' BYTE COUNT: ', mb_strlen(mb_substr($string, $index, 1), '8bit'), PHP_EOL; // should be [4], is [2, 2] } echo '=======================================', PHP_EOL;
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 28, Position 2 = 62
Branch analysis from position: 28
2 jumps found. (Code = 78) Position 1 = 29, Position 2 = 62
Branch analysis from position: 29
1 jumps found. (Code = 42) Position 1 = 28
Branch analysis from position: 28
Branch analysis from position: 62
2 jumps found. (Code = 77) Position 1 = 96, Position 2 = 130
Branch analysis from position: 96
2 jumps found. (Code = 78) Position 1 = 97, Position 2 = 130
Branch analysis from position: 97
1 jumps found. (Code = 42) Position 1 = 96
Branch analysis from position: 96
Branch analysis from position: 130
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 130
Branch analysis from position: 62
filename:       /in/LQott
function name:  (null)
number of ops:  134
compiled vars:  !0 = $string, !1 = $index
line      #* E I O op                               fetch          ext  return  operands
-----------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                       !0, '%F0%9F%98%80'
    5     1        ECHO                                                         '%3D%3D%3D+UTF-8+%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D'
          2        ECHO                                                         '%0A'
    6     3        ECHO                                                         'STRING%3A+'
          4        ECHO                                                         !0
          5        ECHO                                                         '%0A'
    7     6        ECHO                                                         'CHARACTERS%3A+'
          7        INIT_FCALL                                                   'mb_strlen'
          8        SEND_VAR                                                     !0
          9        DO_ICALL                                             $3      
         10        ECHO                                                         $3
         11        ECHO                                                         '%0A'
    8    12        ECHO                                                         'BYTE+COUNT%3A+'
         13        INIT_FCALL                                                   'mb_strlen'
         14        SEND_VAR                                                     !0
         15        SEND_VAL                                                     '8bit'
         16        DO_ICALL                                             $4      
         17        ECHO                                                         $4
         18        ECHO                                                         '%0A'
   10    19        INIT_FCALL                                                   'range'
         20        SEND_VAL                                                     0
         21        INIT_FCALL                                                   'mb_strlen'
         22        SEND_VAR                                                     !0
         23        DO_ICALL                                             $5      
         24        SUB                                                  ~6      $5, 1
         25        SEND_VAL                                                     ~6
         26        DO_ICALL                                             $7      
         27      > FE_RESET_R                                           $8      $7, ->62
         28    > > FE_FETCH_R                                                   $8, !1, ->62
   11    29    >   ECHO                                                         '%0A'
   12    30        ECHO                                                         'CHARACTER+%23'
         31        ADD                                                  ~9      !1, 1
         32        ECHO                                                         ~9
         33        ECHO                                                         '+CODE+POINT%3A+'
         34        ECHO                                                         '0x'
         35        INIT_FCALL                                                   'mb_ord'
         36        INIT_FCALL                                                   'mb_substr'
         37        SEND_VAR                                                     !0
         38        SEND_VAR                                                     !1
         39        SEND_VAL                                                     1
         40        DO_ICALL                                             $10     
         41        SEND_VAR                                                     $10
         42        DO_ICALL                                             $11     
         43        FRAMELESS_ICALL_1                dechex              ~12     $11
         44        ECHO                                                         ~12
         45        ECHO                                                         '%0A'
   13    46        ECHO                                                         'CHARACTER+%23'
         47        ADD                                                  ~13     !1, 1
         48        ECHO                                                         ~13
         49        ECHO                                                         '+BYTE+COUNT%3A+'
         50        INIT_FCALL                                                   'mb_strlen'
         51        INIT_FCALL                                                   'mb_substr'
         52        SEND_VAR                                                     !0
         53        SEND_VAR                                                     !1
         54        SEND_VAL                                                     1
         55        DO_ICALL                                             $14     
         56        SEND_VAR                                                     $14
         57        SEND_VAL                                                     '8bit'
         58        DO_ICALL                                             $15     
         59        ECHO                                                         $15
         60        ECHO                                                         '%0A'
   10    61      > JMP                                                          ->28
         62    >   FE_FREE                                                      $8
   15    63        ECHO                                                         '%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D'
         64        ECHO                                                         '%0A'
         65        ECHO                                                         '%0A'
   17    66        INIT_FCALL                                                   'mb_convert_encoding'
         67        SEND_VAR                                                     !0
         68        SEND_VAL                                                     'UTF-16'
         69        SEND_VAL                                                     'UTF-8'
         70        DO_ICALL                                             $16     
         71        ASSIGN                                                       !0, $16
   19    72        ECHO                                                         '%3D%3D%3D+UTF-16+%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D'
         73        ECHO                                                         '%0A'
   20    74        ECHO                                                         'STRING%3A+'
         75        ECHO                                                         !0
         76        ECHO                                                         '%0A'
   21    77        ECHO                                                         'CHARACTERS%3A+'
         78        INIT_FCALL                                                   'mb_strlen'
         79        SEND_VAR                                                     !0
         80        DO_ICALL                                             $18     
         81        ECHO                                                         $18
         82        ECHO                                                         '%0A'
   22    83        ECHO                                                         'BYTE+COUNT%3A+'
         84        STRLEN                                               ~19     !0
         85        ECHO                                                         ~19
         86        ECHO                                                         '%0A'
   24    87        INIT_FCALL                                                   'range'
         88        SEND_VAL                                                     0
         89        INIT_FCALL                                                   'mb_strlen'
         90        SEND_VAR                                                     !0
         91        DO_ICALL                                             $20     
         92        SUB                                                  ~21     $20, 1
         93        SEND_VAL                                                     ~21
         94        DO_ICALL                                             $22     
         95      > FE_RESET_R                                           $23     $22, ->130
         96    > > FE_FETCH_R                                                   $23, !1, ->130
   25    97    >   ECHO                                                         '%0A'
   26    98        ECHO                                                         'CHARACTER+%23'
         99        ADD                                                  ~24     !1, 1
        100        ECHO                                                         ~24
        101        ECHO                                                         '+CODE+POINT%3A+'
        102        ECHO                                                         '0x'
        103        INIT_FCALL                                                   'mb_ord'
        104        INIT_FCALL                                                   'mb_substr'
        105        SEND_VAR                                                     !0
        106        SEND_VAR                                                     !1
        107        SEND_VAL                                                     1
        108        DO_ICALL                                             $25     
        109        SEND_VAR                                                     $25
        110        DO_ICALL                                             $26     
        111        FRAMELESS_ICALL_1                dechex              ~27     $26
        112        ECHO                                                         ~27
        113        ECHO                                                         '%0A'
   27   114        ECHO                                                         'CHARACTER+%23'
        115        ADD                                                  ~28     !1, 1
        116        ECHO                                                         ~28
        117        ECHO                                                         '+BYTE+COUNT%3A+'
        118        INIT_FCALL                                                   'mb_strlen'
        119        INIT_FCALL                                                   'mb_substr'
        120        SEND_VAR                                                     !0
        121        SEND_VAR                                                     !1
        122        SEND_VAL                                                     1
        123        DO_ICALL                                             $29     
        124        SEND_VAR                                                     $29
        125        SEND_VAL                                                     '8bit'
        126        DO_ICALL                                             $30     
        127        ECHO                                                         $30
        128        ECHO                                                         '%0A'
   24   129      > JMP                                                          ->96
        130    >   FE_FREE                                                      $23
   29   131        ECHO                                                         '%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D%3D'
        132        ECHO                                                         '%0A'
   30   133      > RETURN                                                       1

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
163.13 ms | 2194 KiB | 18 Q