<?php
$search = array(
'/$/',
"/\r/", // Non-legal carriage return
"/[\n\t]+/", // Newlines and tabs
'/[ ]{2,}/', // Runs of spaces, pre-handling
'/<script[^>]*>.*?<\/script>/i', // <script>s -- which strip_tags supposedly has problems with
'/<style[^>]*>.*?<\/style>/i', // <style>s -- which strip_tags supposedly has problems with
//'/<!-- .* -->/', // Comments -- which strip_tags might have problem a with
'/<h[123][^>]*>(.*?)<\/h[123]>/i', // H1 - H3
'/<h[456][^>]*>(.*?)<\/h[456]>/ie', // H4 - H6
'/<p[^>]*>/i', // <P>
'/<br[^>]*>/i', // <br>
'/<b[^>]*>(.*?)<\/b>/i', // <b>
'/<strong[^>]*>(.*?)<\/strong>/i', // <strong>
'/<i[^>]*>(.*?)<\/i>/i', // <i>
'/<em[^>]*>(.*?)<\/em>/i', // <em>
'/(<ul[^>]*>|<\/ul>)/i', // <ul> and </ul>
'/(<ol[^>]*>|<\/ol>)/i', // <ol> and </ol>
'/<li[^>]*>(.*?)<\/li>/i', // <li> and </li>
'/<li[^>]*>/i', // <li>
// '/<a [^>]*href="(.*?)([^"]+)"[^>]*><\/a>/ie',
// '/<a [^>]*href="([^"]+)"[^>]*>(.*?)<\/a>/ie',
// <a href="">
'/<hr[^>]*>/i', // <hr>
'/(<table[^>]*>|<\/table>)/i', // <table> and </table>
'/(<tr[^>]*>|<\/tr>)/i', // <tr> and </tr>
'/<td[^>]*>(.*?)<\/td>/i', // <td> and </td>
'/<th[^>]*>(.*?)<\/th>/i', // <th> and </th>
'/&(nbsp|#160);/i', // Non-breaking space
'/&(quot|rdquo|ldquo|#8220|#8221|#147|#148);/i',
// Double quotes
'/&(apos|rsquo|lsquo|#8216|#8217);/i', // Single quotes
'/>/i', // Greater-than
'/</i', // Less-than
'/&(amp|#38);/i', // Ampersand
'/&(copy|#169);/i', // Copyright
'/&(trade|#8482|#153);/i', // Trademark
'/&(reg|#174);/i', // Registered
'/&(mdash|#151|#8212);/i', // mdash
'/&(ndash|minus|#8211|#8722);/i', // ndash
'/&(bull|#149|#8226);/i', // Bullet
'/&(pound|#163);/i', // Pound sign
'/&(euro|#8364);/i', // Euro sign
//'/&[^&;]+;/i', // Unknown/unhandled entities
'/&[a-z0-9#]{1,10};/i', // Unknown/unhandled entities
'/[ ]{2,}/' // Runs of spaces, post-handling
);
/**
* List of pattern replacements corresponding to patterns searched.
*
* @var array $replace
* @access public
* @see $search
*/
$replace = array(
'$',
'', // Non-legal carriage return
' ', // Newlines and tabs
' ', // Runs of spaces, pre-handling
'', // <script>s -- which strip_tags supposedly has problems with
'', // <style>s -- which strip_tags supposedly has problems with
//'', // Comments -- which strip_tags might have problem a with
"\n\n\\1\n\n", // H1 - H3
"ucwords(\"\n\n\\1\n\n\")", // H4 - H6
"\n\n\t", // <P>
"\n", // <br>
"\\1", // <b>
"\\1", // <strong>
'_\\1_', // <i>
'_\\1_', // <em>
"\n\n", // <ul> and </ul>
"\n\n", // <ol> and </ol>
"\t* \\1\n", // <li> and </li>
"\n\t* ", // <li>
// '$this->_build_link_list("\\1", "\\2")',
// <a href="">
"\n-------------------------\n", // <hr>
"\n\n", // <table> and </table>
"\n", // <tr> and </tr>
"\t\t\\1\n", // <td> and </td>
"\t\t\\1\n", // <th> and </th>
' ', // Non-breaking space
'"', // Double quotes
"'", // Single quotes
'>',
'<',
'&',
'(c)',
'(tm)',
'(R)',
'--',
'-',
'*',
'▒',
'EUR', // Euro sign. . ?
'', // Unknown/unhandled entities
' ' // Runs of spaces, post-handling
);
$data = <<<EOT
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>email</title>
</head>
<body style="margin: 0;padding: 0;background: #f9f9f9;font-size: 14px;color: #5b656e;">
<!-- Preheader -->
<table cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse;background-color: #5b656e;">
<tr>
<td style="font-family: tahoma, geneva, sans-serif;color: #313a42;border-collapse: collapse;">
<table border="0" cellpadding="0" cellspacing="0" summary="" width="640" align="center" style="border-collapse: collapse;">
<tr>
<td style="font-family: tahoma, geneva, sans-serif;color: white;border-collapse: collapse;font-size: 10px;width: 440px;padding: 5px 10px;">Don't want to hear from us anymore? <a href="$unsubscribe$" style="color: #09c;">Unsubscribe here.</a></td>
</tr>
</table>
</td>
</tr>
</table>
EOT;
var_dump(preg_replace($search, $replace, $data));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename: /in/aJVnE
function name: (null)
number of ops: 12
compiled vars: !0 = $search, !1 = $replace, !2 = $data
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
3 0 E > ASSIGN !0, <array>
58 1 ASSIGN !1, <array>
104 2 ASSIGN !2, '%0A%3C%21DOCTYPE+html+PUBLIC+%22-%2F%2FW3C%2F%2FDTD+XHTML+1.0+Strict%2F%2FEN%22+%22http%3A%2F%2Fwww.w3.org%2FTR%2Fxhtml1%2FDTD%2Fxhtml1-strict.dtd%22%3E%0A%3Chtml%3E%0A++%3Chead%3E++%0A++++%3Cmeta+http-equiv%3D%22Content-Type%22+content%3D%22text%2Fhtml%3B+charset%3Dutf-8%22%3E%0A++++%3Cmeta+name%3D%22viewport%22+content%3D%22width%3Ddevice-width%2C+initial-scale%3D1.0%22%3E%0A++++%3Ctitle%3Eemail%3C%2Ftitle%3E%0A+++%0A++%3C%2Fhead%3E%0A++%3Cbody+style%3D%22margin%3A+0%3Bpadding%3A+0%3Bbackground%3A+%23f9f9f9%3Bfont-size%3A+14px%3Bcolor%3A+%235b656e%3B%22%3E%0A+++++%0A++++++%3C%21--+Preheader+--%3E%0A++++++%3Ctable+cellpadding%3D%220%22+cellspacing%3D%220%22+width%3D%22100%25%22+style%3D%22border-collapse%3A+collapse%3Bbackground-color%3A+%235b656e%3B%22%3E%0A++++++++%3Ctr%3E%0A++++++++++%3Ctd+style%3D%22font-family%3A+tahoma%2C+geneva%2C+sans-serif%3Bcolor%3A+%23313a42%3Bborder-collapse%3A+collapse%3B%22%3E%0A++++++++++++%3Ctable+border%3D%220%22+cellpadding%3D%220%22+cellspacing%3D%220%22+summary%3D%22%22+width%3D%22640%22+align%3D%22center%22+style%3D%22border-collapse%3A+collapse%3B%22%3E%0A++++++++++++++%3Ctr%3E%0A++++++++++++++++%3Ctd+style%3D%22font-family%3A+tahoma%2C+geneva%2C+sans-serif%3Bcolor%3A+white%3Bborder-collapse%3A+collapse%3Bfont-size%3A+10px%3Bwidth%3A+440px%3Bpadding%3A+5px+10px%3B%22%3EDon%27t+want+to+hear+from+us+anymore%3F+%3Ca+href%3D%22%26%2336%3Bunsubscribe%26%2336%3B%22+style%3D%22color%3A+%2309c%3B%22%3EUnsubscribe+here.%3C%2Fa%3E%3C%2Ftd%3E%0A%0A%0A%0A%3C%2Ftr%3E%0A%3C%2Ftable%3E%0A%3C%2Ftd%3E%0A%3C%2Ftr%3E%0A%3C%2Ftable%3E%0A'
135 3 INIT_FCALL 'var_dump'
4 INIT_FCALL 'preg_replace'
5 SEND_VAR !0
6 SEND_VAR !1
7 SEND_VAR !2
8 DO_ICALL $6
9 SEND_VAR $6
10 DO_ICALL
11 > RETURN 1
Generated using Vulcan Logic Dumper, using php 8.0.0
preferences:
181.7 ms | 1387 KiB | 17 Q