3v4l.org

run code in 500+ 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 = 43
Branch analysis from position: 23
2 jumps found. (Code = 78) Position 1 = 24, Position 2 = 43
Branch analysis from position: 24
1 jumps found. (Code = 42) Position 1 = 23
Branch analysis from position: 23
Branch analysis from position: 43
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 43
filename:       /in/9dMTh
function name:  (null)
number of ops:  45
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, ->43
         23    > > FE_FETCH_R                                           ~23     $22, !3, ->43
         24    >   ASSIGN                                                       !4, ~23
   21    25        CONCAT                                               ~25     !4, '%0A'
         26        ECHO                                                         ~25
   22    27        INIT_FCALL                                                   'var_dump'
         28        FRAMELESS_ICALL_2                preg_match          ~26     '%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', !3
         29        SEND_VAL                                                     ~26
         30        DO_ICALL                                                     
   23    31        INIT_FCALL                                                   'var_dump'
         32        INIT_METHOD_CALL                                             !1, 'isSuspicious'
         33        SEND_VAR_EX                                                  !3
         34        SEND_VAR_EX                                                  !5
         35        DO_FCALL                                          0  $28     
         36        SEND_VAR                                                     $28
         37        DO_ICALL                                                     
   24    38        INIT_FCALL                                                   'var_dump'
         39        SEND_VAR                                                     !5
         40        DO_ICALL                                                     
   25    41        ECHO                                                         '%0A'
   20    42      > JMP                                                          ->23
         43    >   FE_FREE                                                      $22
   26    44      > RETURN                                                       1

Generated using Vulcan Logic Dumper, using php 8.5.0


preferences:
156.14 ms | 1198 KiB | 15 Q