我正在寻找一个函数,通过用户输入将存储在数据库中的\ n替换为文本字段,除非已有HTML标记。这适用于CMS,因此dumbass用户的工作量较少。
因此,例如,如果用户将以下内容写入文本字段:
<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>
任何人都可以帮助他们已经/已找到的东西吗?
答案 0 :(得分:2)
我会避免重新发明轮子,你可能会遇到一些你必须要处理的特殊规则。即使在你的问题中,规则也不清楚。它与\ 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>
中另一个节点的兄弟节点的所有文本节点,包括空格。一个重要的问题是:是否有文本节点与兄弟姐妹不需要包装?