Html etiketleri arasında satır sonlarını kaldırmak

4 Cevap php

Ben bir web sitesi için içerik düzenlemek için kullanılan bir yönetici bölümünün bir parçası olan bir formu (html ve php) yapıyorum. Kullanıcıların bazı temel html eklemek için izin istiyor. Bu çalışıyor. Ben satır sonlarını korumak istiyorum. Bu da çalışır. Benim sorunum ne zaman birisi böyle bir şey yazıyor olmasıdır:

<ul>
<li>item one</li>
<li>item two</li>
</ul>

yazılır zaman kod satırları arasındaki satır sonları BR'nin haline korunur ve getirilir. Bu, her LI öğe arasında çift aralık var demektir. Şimdi bu bir satırda bütün liste bölümüne yazarak sabit ama) okumak için kafa karıştırıcı yapar ve b) yeterince zor öğretim kişi extraineous satır sonlarını anlatan Dursun kodları kullanmak için var olabilir.

İstediğim bütün / n dışarı ama SADECE UL ve / UL etiketleri arasında şerit bazı yoludur.

4 Cevap

Bu düzenli ifade <ul> ve </ul> arasındaki tüm linebreaks / whitespaces kaldırır <li> ve </li> arasındaki metnin bir parçası değildir

/(?<=<ul>|<\/li>)\s*?(?=<\/ul>|<li>)/is

php örnek:

 $output = preg_replace('/(?<=<ul>|<\/li>)\s*?(?=<\/ul>|<li>)/is', '', $input);

Giriş:

<ul>
<li>item one</li>
<li>item two</li>
</ul>

çıktı:

<ul><li>item one</li><li>item two</li></ul>

EDIT: fixed

HTML de oluşmuş değilse, bu başarısız olur rağmen, normal bir ifade kullanarak kurtulmak mümkün olabilir. Regex varsayılan açgözlü, çünkü bu, HTML etiketleri içinde her şeyi aynı olmalıdır.

<?php

$str = "Hello

    <ul>
    <li>item one</li>
    <li>item two</li>
    </ul>";

$str = preg_replace_callback('~\<[^>]+\>.*\</[^>]+\>~ms','stripNewLines', $str); 

function stripNewLines($match) {
    return str_replace(array("\r", "\n"), '', $match[0]);   
}

echo nl2br($str);

Edit

Aslında, bu iş olmaz. Arasında normal metin ile HTML iki blok varsa, ortasında metin de şeritli.

Ben sorun satır sonları
haline ediliyor anlayış neden yaşıyorum.

Ne yapıyor? Bu PHP mi?

Bir satır boşluk olarak aynı kırmak tedavi HTML değil mi?
Dönüştürerek doğru görünmüyor.

Bu html etiketi satır sonlarını değiştirmek için bir örnek:

public function testLineBreaks()
{
    $html = '<span class="text"
    >some title</span>';

    $pattern = "#</?\w+((\s+\w+(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)/?>#";
    $html = preg_replace_callback(
        $pattern,
        function($match){
            $txt = str_replace(array("\r", "\n"), ' ', $match[0]);
            return preg_replace("/[[:blank:]]+/"," ",$txt);
        },$html
    );

    $this->assertEquals('<span class="text" >some title</span>', $html);
}