php HTML код в одну строку на PHP 

Дата публикации  Дата изменения11.10.21  КомментарииНет   Просмотры17627

Курсы

Преобразование HTML кода в одну строку. Безопасно уменьшает размер кода за счет пробелов между тегами и переводов на новую строку и ускоряет загрузку сайта/страницы.

 

Вариант 1:

<?php $text='  <!DOCTYPE>
<html>
<head>
<title>HTML код в одну строку</title>
</head>
<body>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <br />
Etiam dictum euismod laoreet. <br />
Proin sed turpis eu eros imperdiet condimentum at nec sem. <br />
Cras fermentum rutrum fermentum. <br />
In facilisis scelerisque accumsan. <br />
In vitae justo ut mi tincidunt volutpat vel vitae nibh. <br />
Vestibulum sem orci, accumsan quis gravida et, porttitor nec nisl. <br />
Praesent erat risus, gravida nec volutpat vitae, venenatis eu libero. <br />
Vestibulum lacinia justo at augue cursus tristique. <br />
Proin enim elit, porta venenatis vehicula vel, ornare ut eros. <br />
Etiam adipiscing tincidunt viverra.<br />
 Aliquam et nibh justo. <br />
Quisque ut nulla nunc, a vehicula orci.<br />
Nullam eu odio velit, eu molestie odio. <br />
Sed at justo quis massa dictum egestas.<br />
</p>  
<!--//-->
<script type="text/javascript">document.write(\'<h1>Hello, World!</h1>\');</script>
<!--//-->
</body>
</html>
';
$s=str_replace("\r\n"," ",$text);
echo preg_replace("/((?<=>)|(?<=--)|(?<=.))[\s\n\r\t]+((?=--)|(?=<))/U",'',$s);?>

Повтор \r\n в str_replace и preg_replace намеренный – так весь исходный код в одну строку (вместе с <br />).

Или без str_replace – так в одну строку только теги (кроме <br />):

<?php $text='  <!DOCTYPE>
<html>
<head>
<title>HTML код в одну строку</title>
</head>
<body>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <br />
Etiam dictum euismod laoreet. <br />
Proin sed turpis eu eros imperdiet condimentum at nec sem. <br />
Cras fermentum rutrum fermentum. <br />
In facilisis scelerisque accumsan. <br />
In vitae justo ut mi tincidunt volutpat vel vitae nibh. <br />
Vestibulum sem orci, accumsan quis gravida et, porttitor nec nisl. <br />
Praesent erat risus, gravida nec volutpat vitae, venenatis eu libero. <br />
Vestibulum lacinia justo at augue cursus tristique. <br />
Proin enim elit, porta venenatis vehicula vel, ornare ut eros. <br />
Etiam adipiscing tincidunt viverra.<br />
 Aliquam et nibh justo. <br />
Quisque ut nulla nunc, a vehicula orci.<br />
Nullam eu odio velit, eu molestie odio. <br />
Sed at justo quis massa dictum egestas.<br />
</p> 
<!--//-->
<script type="text/javascript">document.write(\'<h1>Hello, World!</h1>\');</script>
<!--//-->
</body>
</html>
';
echo preg_replace("/((?<=>)|(?<=--)|(?<=.))[\s\n\r\t]+((?=--)|(?=<))/U",'',$text);
?>

Условие (?<=--) включено для:

<!--
   текст
--> 

Можно включать и JavaScript, с экранированием (или заменой) одинарных кавычек, или в виде подключаемого скрипта <script src=""></script>.

Вариант третий, через использование cURL, обрабатывает и результат работы php:

1. Файл (адрес), откуда будем получать контент (динамический, статический):

text.php:

<!DOCTYPE>
<html>
<head>
<title>HTML код в одну строку</title>
</head>
<body>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. <br />
Etiam dictum euismod laoreet. <br />
Proin sed turpis eu eros imperdiet condimentum at nec sem. <br />
Cras fermentum rutrum fermentum. <br />
In facilisis scelerisque accumsan. <br />
In vitae justo ut mi tincidunt volutpat vel vitae nibh. <br />
Vestibulum sem orci, accumsan quis gravida et, porttitor nec nisl. <br />
Praesent erat risus, gravida nec volutpat vitae, venenatis eu libero. <br />
Vestibulum lacinia justo at augue cursus tristique. <br />
Proin enim elit, porta venenatis vehicula vel, ornare ut eros. <br />
Etiam adipiscing tincidunt viverra.<br />
 Aliquam et nibh justo. <br />
Quisque ut nulla nunc, a vehicula orci.<br />
Nullam eu odio velit, eu molestie odio. <br />
Sed at justo quis massa dictum egestas.<br />
</p> 
<!--//-->
<script type="text/javascript">document.write('<h1>JS работает</h1>');</script>
<!--//-->
<!--//-->
<?php
echo "<h1>PHP работает</h1>";
?>
<!--//-->
</body>
</html>

2. Файл (адрес), в который будем вызывать контент, преобразовывать все в одну строку и выводить:

index4.php:

<?php 
//Получаем динамическое (статическое содержимое)
$ch = curl_init ("http://coder.hol.es/example/php/one_line/text.php");
$fp = fopen ("buffer.html", "w");
//открываем буферный (промежуточный файл - уже предварительно его создали) и записываем
curl_setopt ($ch, CURLOPT_FILE, $fp);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
fclose ($fp);
//закрываем файл
$file = 'buffer.html';
$buffer = file_get_contents($file);
// Получаем содержимое полученного :) динамического/статического содержимого из файла и помещаем в переменную
function one_line($buffer)
// обрабатываем переменную
{
// удалить пробелы между html тегами, кроме <pre>
	$buffer = preg_replace('/(?:(?<=\>)|(?<=\/\>))\s+(?=\<\/?)/', '', $buffer);
	if (FALSE === strpos($buffer, '<pre')) {
 $buffer = preg_replace('/\s+/', ' ', $buffer);
	}
// удалить новые строки,за которыми пробелы
	$buffer = preg_replace('/[\t\r]\s+/', ' ', $buffer);
// но сохранить комментарии IE 
	$buffer = preg_replace('/<!(--)([^\[|\|])^(<!-->.*<!--.*-->)/', '', $buffer);
// и скрыть css комменты
	$buffer = preg_replace('/\/\*.*?\*\//', '', $buffer);
//
	return $buffer;
}
echo one_line($buffer); //выводим окончательный результат
?>

*UPD:

Пример скрипта, который удаляет из HTML-кода все переводы строки, вытягивая текст "в одну строку" перед посылкой его в браузер. HTML-код от такого преобразования, очевидно, не изменит своего отображения, потому что в нем пробельные символы, как правило, являются незначащими (для переноса строк там используется тег <br />).

Работа с обработчиками буферов. Файл linearize.php

<?php ## Работа с обработчиками буферов 
  function ob_linearize($text) 
  { 
    // Удалить из текста все переносы строк и повторяющиеся пробелы 
    return preg_replace('/[\r\n\s]+/s', ' ', trim($text)); 
  } 
  // Перехватываем выходной поток с установкой обработчика 
  ob_start("ob_linearize"); 
  // Дальше идет обычное выполнение скрипта. Он может выводить все, 
  // что угодно - в конце из текста будут удалены все переводы строк. 
  echo htmlspecialchars(file_get_contents(__FILE__));

ВНИМАНИЕ!
Помните, что любые ошибки в обработчике не будут выведены в браузер, ибо он, как правило, вызывается уже после завершения работы основной программы! Старайтесь не вызывать большие функции из обработчиков, не удостоверившись, что сообщения об ошибках записываются в файлы журнала сервера, иначе отладка программы может превратиться в сущий ад.

*Источник: Котеров Д. В. «PHP 7. Наиболее полное руководство», стр. 890

 Смотреть пример – Вариант первый

 Смотреть пример – Вариант второй

 Смотреть пример – Вариант третий

 Смотреть пример – Вариант четвертый, с cURL

  Размер:  4,88kB | Изменен:  2.02.13 | Загрузок: 215
Бесплатные курсы

Категории,

Теги: , , , ,

Оцените материал:

Рейтинг: 4.6/10 (5)


КомментарииКомментарии:

Нет комментариев к этой статье.


 

Старые →← Новые