Это (насколько я проверял) рабочая реализация инструкций Стивена Чанга. Я не совсем убежден номером пять, но все равно включил его.
Поместите вещи, которые вы хотите защитить, в массив protected_parts. Делайте это для того, чтобы вы их защищали Если начальный и конечный биты разные (как в HTML-тегах), разделите их запятыми.
Кроме того, я понятия не имею, является ли это наиболее оптимизированным способом сделать это, но он работает для меня и кажется достаточно быстрым. Не стесняйтесь улучшать и т.д. (Дайте мне знать, если вы тоже!)
<code>function MinifyHTML($str) {
$protected_parts = array("<pre>,
"," \ "", "'");
$ extract_values = array ();
$ i = 0;
foreach ($ protected_parts как $ part) {
$ закончено = ложь;
$ search_offset = 0;
$ first_offset = 0;
$ startend = explode (",", $ part);
if (count ($ startend) == 1) {$ startend [1] = $ startend [0]; }
пока (! $ закончено) {
$ first_offset = strpos ($ str, $ startend [0], $ search_offset);
if ($ first_offset === false) {$ закончено = верно; }
еще {
$ search_offset = strpos ($ str, $ startend [1], $ first_offset + strlen ($ startend [0]));
$ extract_values [$ i] = substr ($ str, $ first_offset + strlen ($ startend [0]), $ search_offset - $ first_offset - strlen ($ startend [0]));
$ str = substr ($ str, 0, $ first_offset + strlen ($ startend [0])). "$ #". $ i. "$". substr ($ str, $ search_offset);
$ search_offset + = strlen ($ startend [1]) + strlen ((строка) $ i) + 3 - strlen ($ extract_values [$ i]);
$ Я ++;
}
}
}
$ str = preg_replace ("/ \ s /", "", $ str);
$ str = preg_replace ("/ \ s {2,} /", "", $ str);
$ str = str_replace ("> <", "> <", $ str);
$ str = str_replace (">", ">", $ str);
$ str = str_replace ("<", "<", $ str);
$ str = str_replace ("</", "</", $ str);
for ($ i = count ($ extract_values); $ i> = 0; $ i--) {
$ str = str_replace ("$ #". $ i. "$", $ extract_values [$ i], $ str);
}
вернуть $ str;
}