Ben
dışında (php ile) bazı html yeni çizgileri kaldırmak istiyor boşluk oldukça önemlidir etiketleri.
dışında yeni hatları kaldırarak
Html de oluşmuş ise, <pre>
etiketleri iç içe izin verilmez gerçeği güvenebilirsiniz. Iki geçiş yapın: Öncelikle ön etiketleri ve her şeyin blok içine girdi bölünmüş. Bu görev için normal bir ifade kullanabilirsiniz. Sonra olmayan her ön blokta yeni hatları şerit, ve nihayet tekrar bir araya hepsini katılın.
En iyi html oluşmuş unutmayın, bu nedenle bu yaklaşım bunu kullanmak nerede bazı sınırları olabilir.
Içerik kadar bölünmüş. Bu kolayca ile yapılır ...
$blocks = preg_split('/<(|\/)pre>/', $html);
$ Bloklar elemanları öncesi açılış ve kapanış etiketleri içermez, çünkü sadece, dikkatli olun. Ben HTML geçerli kabul edilebilir olduğunu varsayalım ve bu nedenle ön bloklar dizideki her eleman (1, 3, 5, ...) olmasını bekleyebilirsiniz hissediyorum. Kolay ile test $i % 2 == 1
.
Örnek "tam" betik (size ihtiyacınız olan değişiklik) ...
<?php
//out example HTML file - could just as easily be a read in file
$html = <<<EOF
<html>
<head>
<title>test</title>
</head>
<body>
<h1>Title</h1>
<p>
This is an article about...
</p>
<pre>
line one
line two
line three
</pre>
<div style="float: right:">
random
</div>
</body>
</html>
EOF;
//break it all apart...
$blocks = preg_split('/<(|\/)pre>/', $html);
//and put it all back together again
$html = ""; //reuse as our buffer
foreach($blocks as $i => $block)
{
if($i % 2 == 1)
$html .= "\n<pre>$block</pre>\n"; //break out <pre>...</pre> with \n's
else
$html .= str_replace(array("\n", "\r"), "", $block, $c);
}
echo $html;
?>
Bu 3 yıl sonra olabilir, ama ... Aşağıdaki kod uzun öncesi etiketleri dışında olduğu gibi tüm satır sonları ve boşluk kaldıracaktır. Şerefe!
function sanitize_output($buffer)
{
$search = array(
'/\>[^\S ]+/s', //strip whitespaces after tags, except space
'/[^\S ]+\</s', //strip whitespaces before tags, except space
'/(\s)+/s' // shorten multiple whitespace sequences
);
$replace = array(
'>',
'<',
'\\1'
);
$blocks = preg_split('/(<\/?pre[^>]*>)/', $buffer, null, PREG_SPLIT_DELIM_CAPTURE);
$buffer = '';
foreach($blocks as $i => $block)
{
if($i % 4 == 2)
$buffer .= $block; //break out <pre>...</pre> with \n's
else
$buffer .= preg_replace($search, $replace, $block);
}
return $buffer;
}
ob_start("sanitize_output");