3v4l.org

run code in 300+ PHP versions simultaneously
<?php echo '<pre>'; $html = " </p>consectetur <b>adipisc<i>in</i>g </b>elit. Maecenas sit amet molestie enim. Nulla gravida mi sed ipsum </p> <p>pellentesque<br>ut pulvinar orci consequat. Donec tempus rutrum urna at iaculis. Ut sagittis, tellus eu venenatis imperdiet,</p> <ol> <li> <ol> <li><b></b></li> <li>sdaf</li> </ol> sem dolor mattis leo, </li> <li>in consequat elit lorem ut ligula.</li> </ol> Praessadf"; echo htmlspecialchars($html)."<br>"; var_dump(check_html($html)); function check_html($html) { $tags = array(); preg_match_all('#<(/?[a-zA-Z]+)\b.*?>#im', $html, $tags); $tags = array_map('strtolower', $tags[1]); $lists = array('ul', 'ol'); $single_tags = array('br'); $tags_stack = new SplStack(); $lists_stack = new SplStack(); foreach ($tags as $tag) { if ($tag[0] != '/') { // start tag if (in_array($tag, $single_tags)) { // if single tag, just continue continue; } elseif (in_array($tag, $lists)) { $lists_stack->push($tag); // new list starts } $tags_stack->push($tag); } else { // end tag if (!$tags_stack->count()) { return false; // there aren't opened tags } $end_tag = trim($tag, '/'); // handle lists if (in_array($end_tag, $lists)) { if (!$lists_stack->count() || $lists_stack->pop() != $end_tag) { return false; // there are no opened lists or unclosed list tag } } elseif ($end_tag == 'li') { if (!$lists_stack->count()) { return false; // there are no opened lists } } if ($tags_stack->pop() != $end_tag) { return false; // unclosed tag } } } return !$tags_stack->count(); // true if stack is empty }
Output for 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.28, 7.0.0 - 7.0.20, 7.1.0 - 7.1.10, 7.2.0 - 7.2.33, 7.3.12 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.6
<pre> &lt;/p&gt;consectetur &lt;b&gt;adipisc&lt;i&gt;in&lt;/i&gt;g &lt;/b&gt;elit. Maecenas sit amet molestie enim. Nulla gravida mi sed ipsum &lt;/p&gt; &lt;p&gt;pellentesque&lt;br&gt;ut pulvinar orci consequat. Donec tempus rutrum urna at iaculis. Ut sagittis, tellus eu venenatis imperdiet,&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;ol&gt; &lt;li&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt; &lt;li&gt;sdaf&lt;/li&gt; &lt;/ol&gt; sem dolor mattis leo, &lt;/li&gt; &lt;li&gt;in consequat elit lorem ut ligula.&lt;/li&gt; &lt;/ol&gt; Praessadf<br>bool(false)
Output for 5.0.0 - 5.0.5, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17
<pre> &lt;/p&gt;consectetur &lt;b&gt;adipisc&lt;i&gt;in&lt;/i&gt;g &lt;/b&gt;elit. Maecenas sit amet molestie enim. Nulla gravida mi sed ipsum &lt;/p&gt; &lt;p&gt;pellentesque&lt;br&gt;ut pulvinar orci consequat. Donec tempus rutrum urna at iaculis. Ut sagittis, tellus eu venenatis imperdiet,&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;ol&gt; &lt;li&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt; &lt;li&gt;sdaf&lt;/li&gt; &lt;/ol&gt; sem dolor mattis leo, &lt;/li&gt; &lt;li&gt;in consequat elit lorem ut ligula.&lt;/li&gt; &lt;/ol&gt; Praessadf<br> Fatal error: Class 'SplStack' not found in /in/Ohb5l on line 32
Process exited with code 255.
Output for 4.3.2 - 4.3.11, 4.4.0 - 4.4.9
<pre> &lt;/p&gt;consectetur &lt;b&gt;adipisc&lt;i&gt;in&lt;/i&gt;g &lt;/b&gt;elit. Maecenas sit amet molestie enim. Nulla gravida mi sed ipsum &lt;/p&gt; &lt;p&gt;pellentesque&lt;br&gt;ut pulvinar orci consequat. Donec tempus rutrum urna at iaculis. Ut sagittis, tellus eu venenatis imperdiet,&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;ol&gt; &lt;li&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt; &lt;li&gt;sdaf&lt;/li&gt; &lt;/ol&gt; sem dolor mattis leo, &lt;/li&gt; &lt;li&gt;in consequat elit lorem ut ligula.&lt;/li&gt; &lt;/ol&gt; Praessadf<br> Fatal error: Cannot instantiate non-existent class: splstack in /in/Ohb5l on line 32
Process exited with code 255.
Output for 4.3.0 - 4.3.1
<pre> &lt;/p&gt;consectetur &lt;b&gt;adipisc&lt;i&gt;in&lt;/i&gt;g &lt;/b&gt;elit. Maecenas sit amet molestie enim. Nulla gravida mi sed ipsum &lt;/p&gt; &lt;p&gt;pellentesque&lt;br&gt;ut pulvinar orci consequat. Donec tempus rutrum urna at iaculis. Ut sagittis, tellus eu venenatis imperdiet,&lt;/p&gt; &lt;ol&gt; &lt;li&gt; &lt;ol&gt; &lt;li&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt; &lt;li&gt;sdaf&lt;/li&gt; &lt;/ol&gt; sem dolor mattis leo, &lt;/li&gt; &lt;li&gt;in consequat elit lorem ut ligula.&lt;/li&gt; &lt;/ol&gt; Praessadf<br> Fatal error: Cannot instantiate non-existent class: splstack in /in/Ohb5l on line 32

preferences:
260.28 ms | 403 KiB | 357 Q