3v4l.org

run code in 300+ PHP versions simultaneously
<?php $values = [ "Zero Width Space" => "MaxMustermann", "Zero Width Space" => "Max\u{200B}Mustermann", "Zero Width Non-Joiner" => "Max\u{200C}Mustermann", "Zero Width Joiner" => "Max\u{200D}Mustermann", "Zero Width No-Break Space" => "Max\u{FEFF}Mustermann", ]; $checker = new \Spoofchecker(); $checks = \Spoofchecker::INVISIBLE | \Spoofchecker::MIXED_NUMBERS | \Spoofchecker::HIDDEN_OVERLAY; $checks |= \Spoofchecker::SINGLE_SCRIPT; $checker->setRestrictionLevel(\Spoofchecker::MODERATELY_RESTRICTIVE); $checker->setAllowedLocales('de,fr,it'); $checker->setChecks($checks); foreach ($values as $check => $value) { echo $check."\n"; var_dump(preg_match('/[\x{200B}\x{200C}\x{200D}\x{FEFF}\x{2060}\x{2061}\x{2062}\x{2063}\x{2064}]/u', $value)); var_dump($checker->isSuspicious($value, $errorCode)); var_dump($errorCode); echo "\n"; }
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 23, Position 2 = 46
Branch analysis from position: 23
2 jumps found. (Code = 78) Position 1 = 24, Position 2 = 46
Branch analysis from position: 24
1 jumps found. (Code = 42) Position 1 = 23
Branch analysis from position: 23
Branch analysis from position: 46
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 46
filename:       /in/9dMTh
function name:  (null)
number of ops:  48
compiled vars:  !0 = $values, !1 = $checker, !2 = $checks, !3 = $value, !4 = $check, !5 = $errorCode
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   ASSIGN                                                   !0, <array>
   11     1        NEW                                              $7      'Spoofchecker'
          2        DO_FCALL                                      0          
          3        ASSIGN                                                   !1, $7
   13     4        FETCH_CLASS_CONSTANT                             ~10     'Spoofchecker', 'INVISIBLE'
          5        FETCH_CLASS_CONSTANT                             ~11     'Spoofchecker', 'MIXED_NUMBERS'
          6        BW_OR                                            ~12     ~10, ~11
          7        FETCH_CLASS_CONSTANT                             ~13     'Spoofchecker', 'HIDDEN_OVERLAY'
          8        BW_OR                                            ~14     ~12, ~13
          9        ASSIGN                                                   !2, ~14
   14    10        FETCH_CLASS_CONSTANT                             ~16     'Spoofchecker', 'SINGLE_SCRIPT'
         11        ASSIGN_OP                                     9          !2, ~16
   16    12        INIT_METHOD_CALL                                         !1, 'setRestrictionLevel'
         13        FETCH_CLASS_CONSTANT                             ~18     'Spoofchecker', 'MODERATELY_RESTRICTIVE'
         14        SEND_VAL_EX                                              ~18
         15        DO_FCALL                                      0          
   17    16        INIT_METHOD_CALL                                         !1, 'setAllowedLocales'
         17        SEND_VAL_EX                                              'de%2Cfr%2Cit'
         18        DO_FCALL                                      0          
   18    19        INIT_METHOD_CALL                                         !1, 'setChecks'
         20        SEND_VAR_EX                                              !2
         21        DO_FCALL                                      0          
   20    22      > FE_RESET_R                                       $22     !0, ->46
         23    > > FE_FETCH_R                                       ~23     $22, !3, ->46
         24    >   ASSIGN                                                   !4, ~23
   21    25        CONCAT                                           ~25     !4, '%0A'
         26        ECHO                                                     ~25
   22    27        INIT_FCALL                                               'var_dump'
         28        INIT_FCALL                                               'preg_match'
         29        SEND_VAL                                                 '%2F%5B%5Cx%7B200B%7D%5Cx%7B200C%7D%5Cx%7B200D%7D%5Cx%7BFEFF%7D%5Cx%7B2060%7D%5Cx%7B2061%7D%5Cx%7B2062%7D%5Cx%7B2063%7D%5Cx%7B2064%7D%5D%2Fu'
         30        SEND_VAR                                                 !3
         31        DO_ICALL                                         $26     
         32        SEND_VAR                                                 $26
         33        DO_ICALL                                                 
   23    34        INIT_FCALL                                               'var_dump'
         35        INIT_METHOD_CALL                                         !1, 'isSuspicious'
         36        SEND_VAR_EX                                              !3
         37        SEND_VAR_EX                                              !5
         38        DO_FCALL                                      0  $28     
         39        SEND_VAR                                                 $28
         40        DO_ICALL                                                 
   24    41        INIT_FCALL                                               'var_dump'
         42        SEND_VAR                                                 !5
         43        DO_ICALL                                                 
   25    44        ECHO                                                     '%0A'
   20    45      > JMP                                                      ->23
         46    >   FE_FREE                                                  $22
   26    47      > RETURN                                                   1

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
157.97 ms | 1022 KiB | 15 Q