用<p>包装所有未打包的文本

时间:2017-02-12 11:40:47

标签: php regex dom preg-replace

我有这个字符串:

$str = 'সাংবাদিক<p>দলীয় সূত্রে</p>'
      .'<img width="600" src="img/1.jpg">বিলুপ্ত হওয়া পাবনা'
      .'বিলুপ্ত হওয়া পাবনা<img width="600" src="img/1.jpg">'
      .'বিলুপ্ত হওয়া পাবনা<img width="600" src="img/1.jpg">বিলুপ্ত হওয়া পাবনা'
      .'<p>শাহজাদপুর </p>';

我想变成:

$str = '<p>সাংবাদিক</p><p>দলীয় সূত্রে</p>'
          .'<img width="600" src="img/1.jpg"><p>বিলুপ্ত হওয়া পাবনা</p>'
          .'<p>বিলুপ্ত হওয়া পাবনা</p><img width="600" src="img/1.jpg">'
          .'<p>বিলুপ্ত হওয়া পাবনা</p><img width="600" src="img/1.jpg"><p>বিলুপ্ত হওয়া পাবনা</p>'
          .'<p>শাহজাদপুর </p>';

我试过正则表达式

$str = preg_replace('/^(?!<p>).*(?!<\/p>)/m', '<p>$0</p>', $str);

但没有做好。请帮忙

1 个答案:

答案 0 :(得分:0)

它不是正则表达式的工作,而是DOMDocument的工作。由于您使用的是html部分而不是整个html文档,因此需要将字符串包装到基本的html骨架中,以避免出现自动更正的错误并提供文档编码:

$str = 'সাংবাদিক<p>দলীয় সূত্রে</p>'
      .'<img width="600" src="img/1.jpg">বিলুপ্ত হওয়া পাবনা'
      .'বিলুপ্ত হওয়া পাবনা<img width="600" src="img/1.jpg">'
      .'বিলুপ্ত হওয়া পাবনা<img width="600" src="img/1.jpg">বিলুপ্ত হওয়া পাবনা'
      .'<p>শাহজাদপুর </p>';

$dom = new DOMDocument;
libxml_use_internal_errors(true);
$dom->loadHTML('<html><head><meta charset="UTF-8" /></head><body>' . $str . '</body></html>');

$bodyNode = $dom->getElementsByTagName('body')->item(0);
$result = '';
foreach ($bodyNode->childNodes as $childNode) {
    $result .= ($childNode->nodeType === XML_TEXT_NODE)
        ? '<p>' . $dom->saveHTML($childNode) . '</p>'
        : $dom->saveHTML($childNode);
}

echo $result;