3v4l.org

run code in 300+ PHP versions simultaneously
<?php $html = <<<HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Test</title> </head> <body> <section id="about"> <div class="container about-container"> <div class="row"> <div class="col-md-12"> {{{block:welcome-intro}}} </div> </div> </div> </section> <section id="services"> <div class="container"> <div class="row"> <div class="col-md-12"> <p>You are using system version: {{{variable:system_version}}}</p> <p>Your address: {{{variable:contact-email-address}}}</p> <form action="http://k.loc/content/view/welcome" class="default-form" enctype="multipart/form-data" method="post" accept-charset="utf-8"> <input type="hidden" name="csrfkcmstoken" value="94ee71ada809b9a79d1b723c81020c78" /> <div class="row"> <div class="col-sm-12 form-error"></div> </div> <div class="row"><div class="col-sm-12"><fieldset id="personalinfo"><legend>Personal information</legend><div class="row"><div class="col-sm-12"> <div class="control-label"> <label for="testinput">Name<span class="form-validation-required"> * </span></label> </div> <div class="hint-text">Enter at least 2 characters and a maximum of 12 characters.</div><input id="testinput" name="testinput" placeholder="Enter your name here." class="input-group width-50" type="text" value="{{{variable:system_name}}} {{{variable:system_login}}}"><div class="row"><div class="col-sm-12"><div class="form-error"></div></div></div></div></div><div class="row"><div class="col-sm-12"> <div class="control-label"> <label for="testpassword">Password</label> </div> <div class="hint-text">Your password must be at least 12 characters long, contain 1 special character, 1 nunber, 1 lower case character and 1 upper case character.</div><input id="testpassword" name="testpassword" placeholder="Enter your password here." class="input-group width-50" type="password"><div class="row"><div class="col-sm-12"><div class="form-error"></div></div></div></div></div></fieldset></div></div><div class="row"><div class="col-sm-12"><fieldset id="bioinfo"><legend>Biographical information</legend><div class="row"><div class="col-sm-12"> <div class="control-label"> <label for="testtextarea">Biography</label> <span class="hint-text">A minimum of 40 characters and a maximum of 255 is allowed. This hint is displayed inline.</span> </div> <textarea id="testtextarea" name="testtextarea" placeholder="Please enter your biography here." class="input-group-wide width-100" rows="5" cols="80">{{{variable:system_name}}} {{{variable:system_login}}}</textarea><div class="row"><div class="col-sm-12"><div class="form-error"></div></div></div></div></div><div class="row"><div class="col-sm-12"> <div class="control-label"> <label for="testsummernote">Interests</label> <span class="hint-text">A minimum of 40 characters is required. This hint is displayed inline.</span> </div> <textarea id="testsummernote" name="testsummernote" class="wysiwyg-editor" placeholder="Please enter your interests here."><p>{{{variable:system_name}}}<br></p><p>{{{variable:system_login}}}</p><p>{{{variable:activate_url}}}<br></p></textarea></div></div></fieldset></div></div><div class="row"><div class="col-sm-12"><button name="testsubmit" id="testsubmit" type="submit" class="btn primary">Submit<i class="zmdi zmdi-arrow-forward"></i></button></div></div> </form> </div> </div> </div> </section> </body> </html> HTML; define('LOOKUP', [ 'block' => [ 'welcome-intro' => 'custom intro' ], 'variable' => [ 'contact-email-address' => 'mmu@mmu.com', 'system_version' => 'sys ver', 'system_name' => 'sys name', 'system_login' => 'sys login', 'activate_url' => 'some url' ], ]); $dom = new DOMDocument(); libxml_use_internal_errors(true); $dom->loadHTML($html); $xpath = new DOMXpath($dom); foreach ($xpath->query("//*[not(self::textarea or self::select or self::input) and contains(., '{{{')]/text()") as $node) { $node->nodeValue = preg_replace_callback('~{{{([^:]+):([^}]+)}}}~', function($m) { return LOOKUP[$m[1]][$m[2]] ?? '**unknown variable**'; }, $node->nodeValue); } echo $dom->saveHTML();
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 77) Position 1 = 22, Position 2 = 33
Branch analysis from position: 22
2 jumps found. (Code = 78) Position 1 = 23, Position 2 = 33
Branch analysis from position: 23
1 jumps found. (Code = 42) Position 1 = 22
Branch analysis from position: 22
Branch analysis from position: 33
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 33
filename:       /in/mRCZc
function name:  (null)
number of ops:  38
compiled vars:  !0 = $html, !1 = $dom, !2 = $xpath, !3 = $node
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    2     0  E >   ASSIGN                                                   !0, '%3C%21DOCTYPE+html%3E%0A%3Chtml+lang%3D%22en%22%3E%0A%3Chead%3E%0A++++%3Cmeta+charset%3D%22utf-8%22%3E%0A++++%3Ctitle%3ETest%3C%2Ftitle%3E%0A%3C%2Fhead%3E%0A%3Cbody%3E%0A++++%3Csection+id%3D%22about%22%3E%0A++++++++%3Cdiv+class%3D%22container+about-container%22%3E%0A++++++++++++%3Cdiv+class%3D%22row%22%3E%0A++++++++++++++++%3Cdiv+class%3D%22col-md-12%22%3E%0A++++++++++++++++++++%7B%7B%7Bblock%3Awelcome-intro%7D%7D%7D%0A++++++++++++++++%3C%2Fdiv%3E%0A++++++++++++%3C%2Fdiv%3E%0A++++++++%3C%2Fdiv%3E%0A++++%3C%2Fsection%3E%0A++++%3Csection+id%3D%22services%22%3E%0A++++++++%3Cdiv+class%3D%22container%22%3E%0A++++++++++++%3Cdiv+class%3D%22row%22%3E%0A++++++++++++++++%3Cdiv+class%3D%22col-md-12%22%3E%0A++++++++++++++++++++++++++++++++++++++++%3Cp%3EYou+are+using+system+version%3A+%7B%7B%7Bvariable%3Asystem_version%7D%7D%7D%3C%2Fp%3E%0A++++++++++++++++++++%3Cp%3EYour+address%3A+%7B%7B%7Bvariable%3Acontact-email-address%7D%7D%7D%3C%2Fp%3E%0A++++++++++++++++++++%3Cform+action%3D%22http%3A%2F%2Fk.loc%2Fcontent%2Fview%2Fwelcome%22++class%3D%22default-form%22+enctype%3D%22multipart%2Fform-data%22+method%3D%22post%22+accept-charset%3D%22utf-8%22%3E%0A++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%3Cinput+type%3D%22hidden%22+name%3D%22csrfkcmstoken%22+value%3D%2294ee71ada809b9a79d1b723c81020c78%22+%2F%3E%0A%0A++++++++++++++++++++++++%3Cdiv+class%3D%22row%22%3E%0A++++++++++++++++++++++++++++%3Cdiv+class%3D%22col-sm-12+form-error%22%3E%3C%2Fdiv%3E%0A++++++++++++++++++++++++%3C%2Fdiv%3E%0A++++++++++++++++++++%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%3Cfieldset+id%3D%22personalinfo%22%3E%3Clegend%3EPersonal+information%3C%2Flegend%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%0A++++++++++++++++++++%3Cdiv+class%3D%22control-label%22%3E%0A++++++++++++++++++++++++%3Clabel+for%3D%22testinput%22%3EName%3Cspan+class%3D%22form-validation-required%22%3E+%2A+%3C%2Fspan%3E%3C%2Flabel%3E%0A%0A++++++++++++++++++++%3C%2Fdiv%3E%0A++++++++++++++++%3Cdiv+class%3D%22hint-text%22%3EEnter+at+least+2+characters+and+a+maximum+of+12+characters.%3C%2Fdiv%3E%3Cinput+id%3D%22testinput%22+name%3D%22testinput%22+placeholder%3D%22Enter+your+name+here.%22+class%3D%22input-group+width-50%22+type%3D%22text%22+value%3D%22%7B%7B%7Bvariable%3Asystem_name%7D%7D%7D++%7B%7B%7Bvariable%3Asystem_login%7D%7D%7D%22%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%3Cdiv+class%3D%22form-error%22%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%0A++++++++++++++++++++%3Cdiv+class%3D%22control-label%22%3E%0A++++++++++++++++++++++++%3Clabel+for%3D%22testpassword%22%3EPassword%3C%2Flabel%3E%0A%0A++++++++++++++++++++%3C%2Fdiv%3E%0A++++++++++++++++%3Cdiv+class%3D%22hint-text%22%3EYour+password+must+be+at+least+12+characters+long%2C+contain+1+special+character%2C+1+nunber%2C+1+lower+case+character+and+1+upper+case+character.%3C%2Fdiv%3E%3Cinput+id%3D%22testpassword%22+name%3D%22testpassword%22+placeholder%3D%22Enter+your+password+here.%22+class%3D%22input-group+width-50%22+type%3D%22password%22%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%3Cdiv+class%3D%22form-error%22%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Ffieldset%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%3Cfieldset+id%3D%22bioinfo%22%3E%3Clegend%3EBiographical+information%3C%2Flegend%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%0A++++++++++++++++++++%3Cdiv+class%3D%22control-label%22%3E%0A++++++++++++++++++++++++%3Clabel+for%3D%22testtextarea%22%3EBiography%3C%2Flabel%3E%0A++++++++++++++++%3Cspan+class%3D%22hint-text%22%3EA+minimum+of+40+characters+and+a+maximum+of+255+is+allowed.+This+hint+is+displayed+inline.%3C%2Fspan%3E%0A++++++++++++++++++++%3C%2Fdiv%3E%0A++++++++++++++++%3Ctextarea+id%3D%22testtextarea%22+name%3D%22testtextarea%22+placeholder%3D%22Please+enter+your+biography+here.%22+class%3D%22input-group-wide+width-100%22+rows%3D%225%22+cols%3D%2280%22%3E%7B%7B%7Bvariable%3Asystem_name%7D%7D%7D%0A%0A%7B%7B%7Bvariable%3Asystem_login%7D%7D%7D%3C%2Ftextarea%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%3Cdiv+class%3D%22form-error%22%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%0A++++++++++++++++++++%3Cdiv+class%3D%22control-label%22%3E%0A++++++++++++++++++++++++%3Clabel+for%3D%22testsummernote%22%3EInterests%3C%2Flabel%3E%0A++++++++++++++++%3Cspan+class%3D%22hint-text%22%3EA+minimum+of+40+characters+is+required.+This+hint+is+displayed+inline.%3C%2Fspan%3E%0A++++++++++++++++++++%3C%2Fdiv%3E%0A++++++++++++++++%3Ctextarea+id%3D%22testsummernote%22+name%3D%22testsummernote%22+class%3D%22wysiwyg-editor%22+placeholder%3D%22Please+enter+your+interests+here.%22%3E%3Cp%3E%7B%7B%7Bvariable%3Asystem_name%7D%7D%7D%3Cbr%3E%3C%2Fp%3E%3Cp%3E%7B%7B%7Bvariable%3Asystem_login%7D%7D%7D%3C%2Fp%3E%3Cp%3E%7B%7B%7Bvariable%3Aactivate_url%7D%7D%7D%3Cbr%3E%3C%2Fp%3E%3C%2Ftextarea%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3C%2Ffieldset%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%3Cdiv+class%3D%22row%22%3E%3Cdiv+class%3D%22col-sm-12%22%3E%3Cbutton+name%3D%22testsubmit%22+id%3D%22testsubmit%22+type%3D%22submit%22+class%3D%22btn+primary%22%3ESubmit%3Ci+class%3D%22zmdi+zmdi-arrow-forward%22%3E%3C%2Fi%3E%3C%2Fbutton%3E%3C%2Fdiv%3E%3C%2Fdiv%3E%0A++++++++%3C%2Fform%3E++++++++++++++++%3C%2Fdiv%3E%0A++++++++++++%3C%2Fdiv%3E%0A++++++++%3C%2Fdiv%3E%0A++++%3C%2Fsection%3E%0A%3C%2Fbody%3E%0A%3C%2Fhtml%3E'
   62     1        INIT_FCALL                                               'define'
          2        SEND_VAL                                                 'LOOKUP'
   64     3        SEND_VAL                                                 <array>
   62     4        DO_ICALL                                                 
   76     5        NEW                                              $6      'DOMDocument'
          6        DO_FCALL                                      0          
          7        ASSIGN                                                   !1, $6
   77     8        INIT_FCALL                                               'libxml_use_internal_errors'
          9        SEND_VAL                                                 <true>
         10        DO_ICALL                                                 
   78    11        INIT_METHOD_CALL                                         !1, 'loadHTML'
         12        SEND_VAR_EX                                              !0
         13        DO_FCALL                                      0          
   79    14        NEW                                              $11     'DOMXpath'
         15        SEND_VAR_EX                                              !1
         16        DO_FCALL                                      0          
         17        ASSIGN                                                   !2, $11
   81    18        INIT_METHOD_CALL                                         !2, 'query'
         19        SEND_VAL_EX                                              '%2F%2F%2A%5Bnot%28self%3A%3Atextarea+or+self%3A%3Aselect+or+self%3A%3Ainput%29+and+contains%28.%2C+%27%7B%7B%7B%27%29%5D%2Ftext%28%29'
         20        DO_FCALL                                      0  $14     
         21      > FE_RESET_R                                       $15     $14, ->33
         22    > > FE_FETCH_R                                               $15, !3, ->33
   82    23    >   INIT_FCALL                                               'preg_replace_callback'
         24        SEND_VAL                                                 '%7E%7B%7B%7B%28%5B%5E%3A%5D%2B%29%3A%28%5B%5E%7D%5D%2B%29%7D%7D%7D%7E'
         25        DECLARE_LAMBDA_FUNCTION                          ~17     [0]
   84    26        SEND_VAL                                                 ~17
   85    27        FETCH_OBJ_R                                      ~18     !3, 'nodeValue'
         28        SEND_VAL                                                 ~18
   82    29        DO_ICALL                                         $19     
         30        ASSIGN_OBJ                                               !3, 'nodeValue'
   85    31        OP_DATA                                                  $19
   81    32      > JMP                                                      ->22
         33    >   FE_FREE                                                  $15
   87    34        INIT_METHOD_CALL                                         !1, 'saveHTML'
         35        DO_FCALL                                      0  $20     
         36        ECHO                                                     $20
         37      > RETURN                                                   1


Dynamic Functions:
Dynamic Function 0
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/mRCZc
function name:  {closure}
number of ops:  10
compiled vars:  !0 = $m
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   82     0  E >   RECV                                             !0      
   83     1        FETCH_CONSTANT                                   ~1      'LOOKUP'
          2        FETCH_DIM_R                                      ~2      !0, 1
          3        FETCH_DIM_R                                      ~4      !0, 2
          4        FETCH_DIM_IS                                     ~3      ~1, ~2
          5        FETCH_DIM_IS                                     ~5      ~3, ~4
          6        COALESCE                                         ~6      ~5
          7        QM_ASSIGN                                        ~6      '%2A%2Aunknown+variable%2A%2A'
          8      > RETURN                                                   ~6
   84     9*     > RETURN                                                   null

End of Dynamic Function 0

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
140.05 ms | 1009 KiB | 16 Q