3v4l.org

run code in 300+ PHP versions simultaneously
<?php function truncate_html($s, $l, $e = '&hellip;', $isHTML = true) { $s = trim($s); $e = (strlen(strip_tags($s)) > $l) ? $e : ''; $i = 0; $tags = array(); if($isHTML) { preg_match_all('/<[^>]+>([^<]*)/', $s, $m, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); foreach($m as $o) { if($o[0][1] - $i >= $l) { break; } $t = substr(strtok($o[0][0], " \t\n\r\0\x0B>"), 1); if($t[0] != '/') { $tags[] = $t; } elseif(end($tags) == substr($t, 1)) { array_pop($tags); } $i += $o[1][1] - $o[0][1]; } } $output = substr($s, 0, $l = min(strlen($s), $l + $i)) . (count($tags = array_reverse($tags)) ? '</' . implode('></', $tags) . '>' : '') . $e; return $output; } print truncate_html( '<p>Ключевым элементом в области снижения влияния объектов производства на водные ресурсы является уменьшение забора воды и качество <i>очистительных</i> процедур.</p> <p>Для <strong>этих</strong> целей Группа «Газпром» проводит организационно-технические мероприятия, <img src="http://osb.loc/images/logo.jpg" alt="test" text> в частности по установке средств измерения расхода воды, а также установке и наладке запорно-затворной арматуры на своих предприятиях, что способствует существенной экономии водных ресурсов.</p> <p>Повышение эффективности действующих очистных сооружений и внедрение новых технологий очистки стоков позволяет обеспечить нормативное качество очистки сточных вод. Общая мощность очистных сооружений «Газпрома» в 2010 г. составила 153,263 млн куб. м. Половина нормативно очищенных стоков прошла очистку на сооружениях биологической очистки, 39% — механической очистки, 12% — физико-химической очистки сточных вод.</p>', 30 );
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/5ZH0A
function name:  (null)
number of ops:  6
compiled vars:  none
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   31     0  E >   INIT_FCALL                                               'truncate_html'
   32     1        SEND_VAL                                                 '%3Cp%3E%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%BC+%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%BC+%D0%B2+%D0%BE%D0%B1%D0%BB%D0%B0%D1%81%D1%82%D0%B8+%D1%81%D0%BD%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F+%D0%B2%D0%BB%D0%B8%D1%8F%D0%BD%D0%B8%D1%8F+%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2+%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%B0+%D0%BD%D0%B0+%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D0%B5+%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D1%8B+%D1%8F%D0%B2%D0%BB%D1%8F%D0%B5%D1%82%D1%81%D1%8F+%D1%83%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B5%D0%BD%D0%B8%D0%B5+%D0%B7%D0%B0%D0%B1%D0%BE%D1%80%D0%B0+%D0%B2%D0%BE%D0%B4%D1%8B+%D0%B8+%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE+%3Ci%3E%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D1%85%3C%2Fi%3E+%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%B4%D1%83%D1%80.%3C%2Fp%3E%0A%3Cp%3E%D0%94%D0%BB%D1%8F+%3Cstrong%3E%D1%8D%D1%82%D0%B8%D1%85%3C%2Fstrong%3E+%D1%86%D0%B5%D0%BB%D0%B5%D0%B9+%D0%93%D1%80%D1%83%D0%BF%D0%BF%D0%B0+%C2%AB%D0%93%D0%B0%D0%B7%D0%BF%D1%80%D0%BE%D0%BC%C2%BB+%D0%BF%D1%80%D0%BE%D0%B2%D0%BE%D0%B4%D0%B8%D1%82+%D0%BE%D1%80%D0%B3%D0%B0%D0%BD%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE-%D1%82%D0%B5%D1%85%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5+%D0%BC%D0%B5%D1%80%D0%BE%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F%2C+%3Cimg+src%3D%22http%3A%2F%2Fosb.loc%2Fimages%2Flogo.jpg%22+alt%3D%22test%22+text%3E+%D0%B2+%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%BE%D1%81%D1%82%D0%B8+%D0%BF%D0%BE+%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5+%D1%81%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B2+%D0%B8%D0%B7%D0%BC%D0%B5%D1%80%D0%B5%D0%BD%D0%B8%D1%8F+%D1%80%D0%B0%D1%81%D1%85%D0%BE%D0%B4%D0%B0+%D0%B2%D0%BE%D0%B4%D1%8B%2C+%D0%B0+%D1%82%D0%B0%D0%BA%D0%B6%D0%B5+%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B5+%D0%B8+%D0%BD%D0%B0%D0%BB%D0%B0%D0%B4%D0%BA%D0%B5+%D0%B7%D0%B0%D0%BF%D0%BE%D1%80%D0%BD%D0%BE-%D0%B7%D0%B0%D1%82%D0%B2%D0%BE%D1%80%D0%BD%D0%BE%D0%B9+%D0%B0%D1%80%D0%BC%D0%B0%D1%82%D1%83%D1%80%D1%8B+%D0%BD%D0%B0+%D1%81%D0%B2%D0%BE%D0%B8%D1%85+%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D1%80%D0%B8%D1%8F%D1%82%D0%B8%D1%8F%D1%85%2C+%D1%87%D1%82%D0%BE+%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D1%83%D0%B5%D1%82+%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9+%D1%8D%D0%BA%D0%BE%D0%BD%D0%BE%D0%BC%D0%B8%D0%B8+%D0%B2%D0%BE%D0%B4%D0%BD%D1%8B%D1%85+%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%BE%D0%B2.%3C%2Fp%3E%0A%3Cp%3E%D0%9F%D0%BE%D0%B2%D1%8B%D1%88%D0%B5%D0%BD%D0%B8%D0%B5+%D1%8D%D1%84%D1%84%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8+%D0%B4%D0%B5%D0%B9%D1%81%D1%82%D0%B2%D1%83%D1%8E%D1%89%D0%B8%D1%85+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BD%D1%8B%D1%85+%D1%81%D0%BE%D0%BE%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9+%D0%B8+%D0%B2%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BD%D0%BE%D0%B2%D1%8B%D1%85+%D1%82%D0%B5%D1%85%D0%BD%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D0%B9+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B8+%D1%81%D1%82%D0%BE%D0%BA%D0%BE%D0%B2+%D0%BF%D0%BE%D0%B7%D0%B2%D0%BE%D0%BB%D1%8F%D0%B5%D1%82+%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B8%D1%82%D1%8C+%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B5+%D0%BA%D0%B0%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B8+%D1%81%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D1%85+%D0%B2%D0%BE%D0%B4.+%D0%9E%D0%B1%D1%89%D0%B0%D1%8F+%D0%BC%D0%BE%D1%89%D0%BD%D0%BE%D1%81%D1%82%D1%8C+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BD%D1%8B%D1%85+%D1%81%D0%BE%D0%BE%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9+%C2%AB%D0%93%D0%B0%D0%B7%D0%BF%D1%80%D0%BE%D0%BC%D0%B0%C2%BB+%D0%B2+2010+%D0%B3.+%D1%81%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0+153%2C263+%D0%BC%D0%BB%D0%BD+%D0%BA%D1%83%D0%B1.+%D0%BC.+%D0%9F%D0%BE%D0%BB%D0%BE%D0%B2%D0%B8%D0%BD%D0%B0+%D0%BD%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE+%D0%BE%D1%87%D0%B8%D1%89%D0%B5%D0%BD%D0%BD%D1%8B%D1%85+%D1%81%D1%82%D0%BE%D0%BA%D0%BE%D0%B2+%D0%BF%D1%80%D0%BE%D1%88%D0%BB%D0%B0+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BA%D1%83+%D0%BD%D0%B0+%D1%81%D0%BE%D0%BE%D1%80%D1%83%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F%D1%85+%D0%B1%D0%B8%D0%BE%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B8%2C+39%25+%E2%80%94+%D0%BC%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B8%2C+12%25+%E2%80%94+%D1%84%D0%B8%D0%B7%D0%B8%D0%BA%D0%BE-%D1%85%D0%B8%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B9+%D0%BE%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B8+%D1%81%D1%82%D0%BE%D1%87%D0%BD%D1%8B%D1%85+%D0%B2%D0%BE%D0%B4.%3C%2Fp%3E'
   35     2        SEND_VAL                                                 30
          3        DO_FCALL                                      0  $0      
          4        ECHO                                                     $0
          5      > RETURN                                                   1

Function truncate_html:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 43) Position 1 = 14, Position 2 = 16
Branch analysis from position: 14
1 jumps found. (Code = 42) Position 1 = 17
Branch analysis from position: 17
2 jumps found. (Code = 43) Position 1 = 21, Position 2 = 72
Branch analysis from position: 21
2 jumps found. (Code = 77) Position 1 = 28, Position 2 = 71
Branch analysis from position: 28
2 jumps found. (Code = 78) Position 1 = 29, Position 2 = 71
Branch analysis from position: 29
2 jumps found. (Code = 43) Position 1 = 34, Position 2 = 35
Branch analysis from position: 34
1 jumps found. (Code = 42) Position 1 = 71
Branch analysis from position: 71
2 jumps found. (Code = 43) Position 1 = 90, Position 2 = 98
Branch analysis from position: 90
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 98
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 35
2 jumps found. (Code = 43) Position 1 = 49, Position 2 = 52
Branch analysis from position: 49
1 jumps found. (Code = 42) Position 1 = 64
Branch analysis from position: 64
1 jumps found. (Code = 42) Position 1 = 28
Branch analysis from position: 28
Branch analysis from position: 52
2 jumps found. (Code = 43) Position 1 = 61, Position 2 = 64
Branch analysis from position: 61
1 jumps found. (Code = 42) Position 1 = 28
Branch analysis from position: 28
Branch analysis from position: 64
Branch analysis from position: 71
Branch analysis from position: 71
Branch analysis from position: 72
Branch analysis from position: 16
2 jumps found. (Code = 43) Position 1 = 21, Position 2 = 72
Branch analysis from position: 21
Branch analysis from position: 72
filename:       /in/5ZH0A
function name:  truncate_html
number of ops:  104
compiled vars:  !0 = $s, !1 = $l, !2 = $e, !3 = $isHTML, !4 = $i, !5 = $tags, !6 = $m, !7 = $o, !8 = $t, !9 = $output
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV                                             !0      
          1        RECV                                             !1      
          2        RECV_INIT                                        !2      '%26hellip%3B'
          3        RECV_INIT                                        !3      <true>
    4     4        INIT_FCALL                                               'trim'
          5        SEND_VAR                                                 !0
          6        DO_ICALL                                         $10     
          7        ASSIGN                                                   !0, $10
    5     8        INIT_FCALL                                               'strip_tags'
          9        SEND_VAR                                                 !0
         10        DO_ICALL                                         $12     
         11        STRLEN                                           ~13     $12
         12        IS_SMALLER                                               !1, ~13
         13      > JMPZ                                                     ~14, ->16
         14    >   QM_ASSIGN                                        ~15     !2
         15      > JMP                                                      ->17
         16    >   QM_ASSIGN                                        ~15     ''
         17    >   ASSIGN                                                   !2, ~15
    6    18        ASSIGN                                                   !4, 0
    7    19        ASSIGN                                                   !5, <array>
    9    20      > JMPZ                                                     !3, ->72
   10    21    >   INIT_FCALL                                               'preg_match_all'
         22        SEND_VAL                                                 '%2F%3C%5B%5E%3E%5D%2B%3E%28%5B%5E%3C%5D%2A%29%2F'
         23        SEND_VAR                                                 !0
         24        SEND_REF                                                 !6
         25        SEND_VAL                                                 258
         26        DO_ICALL                                                 
   11    27      > FE_RESET_R                                       $20     !6, ->71
         28    > > FE_FETCH_R                                               $20, !7, ->71
   12    29    >   FETCH_DIM_R                                      ~21     !7, 0
         30        FETCH_DIM_R                                      ~22     ~21, 1
         31        SUB                                              ~23     ~22, !4
         32        IS_SMALLER_OR_EQUAL                                      !1, ~23
         33      > JMPZ                                                     ~24, ->35
   13    34    > > JMP                                                      ->71
   15    35    >   INIT_FCALL                                               'substr'
         36        INIT_FCALL                                               'strtok'
         37        FETCH_DIM_R                                      ~25     !7, 0
         38        FETCH_DIM_R                                      ~26     ~25, 0
         39        SEND_VAL                                                 ~26
         40        SEND_VAL                                                 '+%09%0A%0D%00%0B%3E'
         41        DO_ICALL                                         $27     
         42        SEND_VAR                                                 $27
         43        SEND_VAL                                                 1
         44        DO_ICALL                                         $28     
         45        ASSIGN                                                   !8, $28
   16    46        FETCH_DIM_R                                      ~30     !8, 0
         47        IS_NOT_EQUAL                                             ~30, '%2F'
         48      > JMPZ                                                     ~31, ->52
   17    49    >   ASSIGN_DIM                                               !5
         50        OP_DATA                                                  !8
         51      > JMP                                                      ->64
   19    52    >   INIT_FCALL                                               'end'
         53        SEND_REF                                                 !5
         54        DO_ICALL                                         $33     
         55        INIT_FCALL                                               'substr'
         56        SEND_VAR                                                 !8
         57        SEND_VAL                                                 1
         58        DO_ICALL                                         $34     
         59        IS_EQUAL                                                 $33, $34
         60      > JMPZ                                                     ~35, ->64
   20    61    >   INIT_FCALL                                               'array_pop'
         62        SEND_REF                                                 !5
         63        DO_ICALL                                                 
   22    64    >   FETCH_DIM_R                                      ~37     !7, 1
         65        FETCH_DIM_R                                      ~38     ~37, 1
         66        FETCH_DIM_R                                      ~39     !7, 0
         67        FETCH_DIM_R                                      ~40     ~39, 1
         68        SUB                                              ~41     ~38, ~40
         69        ASSIGN_OP                                     1          !4, ~41
   11    70      > JMP                                                      ->28
         71    >   FE_FREE                                                  $20
   25    72    >   INIT_FCALL                                               'substr'
         73        SEND_VAR                                                 !0
         74        SEND_VAL                                                 0
         75        INIT_FCALL                                               'min'
         76        STRLEN                                           ~43     !0
         77        SEND_VAL                                                 ~43
         78        ADD                                              ~44     !1, !4
         79        SEND_VAL                                                 ~44
         80        DO_ICALL                                         $45     
         81        ASSIGN                                           ~46     !1, $45
         82        SEND_VAL                                                 ~46
         83        DO_ICALL                                         $47     
         84        INIT_FCALL                                               'array_reverse'
         85        SEND_VAR                                                 !5
         86        DO_ICALL                                         $48     
         87        ASSIGN                                           ~49     !5, $48
         88        COUNT                                            ~50     ~49
         89      > JMPZ                                                     ~50, ->98
         90    >   INIT_FCALL                                               'implode'
         91        SEND_VAL                                                 '%3E%3C%2F'
         92        SEND_VAR                                                 !5
         93        DO_ICALL                                         $51     
         94        CONCAT                                           ~52     '%3C%2F', $51
         95        CONCAT                                           ~53     ~52, '%3E'
         96        QM_ASSIGN                                        ~54     ~53
         97      > JMP                                                      ->99
         98    >   QM_ASSIGN                                        ~54     ''
         99    >   CONCAT                                           ~55     $47, ~54
        100        CONCAT                                           ~56     ~55, !2
        101        ASSIGN                                                   !9, ~56
   26   102      > RETURN                                                   !9
   27   103*     > RETURN                                                   null

End of function truncate_html

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
168.43 ms | 1411 KiB | 34 Q