簡體   English   中英

開閉 <p> 標簽

[英]Closing and opening <p> tags

我有一個將<img>標記包裝在<div>的函數。 通常,它們可以出現在<p>標記中(由於所見即所得的編輯器)。

    $doc->loadHtml($str);

    $tags = $doc->getElementsByTagName('img');

    foreach ($tags as $tag) {

        $div = $doc->createElement('div');
        $tag->parentNode->insertBefore($div, $tag);
        $div->appendChild($tag);
    }

我想更改我的功能,以便如果有一個打開的<p>標記,它會在該打開的<div>之前附加一個結束</p>標記,然后在結束</div>之后添加一個開頭<p> </div>

當前何時輸入

'<p>blah blah <img src="incorrect.gif"> blah blah</p>

我的輸出是

'<p>blah blah <div><img src="incorrect.gif"></div> blah blah</p>

我希望輸出是

'<p>blah blah </p><div><img src="correct.gif"></div><p> blah blah</p>

我想到兩種方法:

  1. 而不是用<div>...</div>包裝圖像,而是用</p><div>...</div><p>包裝圖像
  2. 檢測div標簽並用</p>...<p>包裝

如果確定在圖像周圍使用的換行符始終<div>...</div>對,則可以考慮使用regex進行簡單替換:

PHP

$html = preg_replace_all('/<div[^>]*>(.*?)</div>/i', '</p>$1<p>', $html)

如果在包裝div元素中包含屬性,這也將起作用。 但是,如果您打算開始將regex用於HTML上的更復雜的操作,則以下是上一篇文章,其中詳細介紹了為什么這樣做不是一個好主意:

使用正則表達式解析HTML:為什么不呢?

您可以使用preg_replace函數來實現。

$html ='<p>blah blah <div><img src="incorrect.gif"></div> blah blah</p>';
echo preg_replace("/<p>(.*?)<div>(.*?)<\/div>(.*?)<\/p>/", "<p>$1</p><div>$2</div><p>$3</p>", $html);

我已經測試了幾種情況,盡管使用其他幾個進行了檢查

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM