我正在寻找一个函数,该函数通过用户输入到文本字段来替换存储在数据库中的''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>
中其他节点的所有文本节点,包括空白。一个重要的问题是:是否存在具有兄弟节点的文本节点不需要包装?