php替换 除非出现其他有效的HTML标记


php replace except where other valid HTML tags appear

我正在寻找一个函数,该函数通过用户输入到文本字段来替换存储在数据库中的''n,除非已经有HTML标记。这是一个CMS,这样愚蠢的用户就没有那么多的工作要做。

因此,例如,如果用户在文本字段中写入以下内容:

<H1>Title of page</H1>
This is the first paragraph in the page.
<H2>Sub section</H2>
This is a sub-section.

我希望函数返回:

<H1>Title of page</H1>
<p>This is the first paragraph in the page.</p>
<H2>Sub section</H2>
<p>This is a sub-section.</p>

有人能帮上他们已经找到的东西吗?

我会避免重新发明轮子,而且你可能会遇到大量必须处理的特殊规则。即使在你的问题中,规则也不明确。它与''n有什么关系?我建议使用html解析器。PHP有一些:

$dom = new DOMDocument;
$dom->loadHTML($start);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//text()[following-sibling::* or preceding-sibling::*]');
foreach ($nodes as $node) {
   $parent = $node->parentNode;
   $p = $dom->createElement('p', htmlentities($node->nodeValue, ENT_COMPAT, 'UTF-8'));
   $parent->insertBefore($p, $node);
   $parent->removeChild($node);
}

这将包装<p>中其他节点的所有文本节点,包括空白。一个重要的问题是:是否存在具有兄弟节点的文本节点不需要包装?