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

wrapped all unwrapped text with <p>

我有这个字符串:

$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>[=13=]</p>', $str);

但做得不对。请帮助

这不是正则表达式的工作,而是 DOMDocument 的工作。由于您正在处理 html 部分而不是整个 html 文档,因此您需要将字符串包装到基本的 html 骨架中以避免 auto-correction 出现意外情况并提供文档编码:

$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;