我有一个自定义开发的CMS,用户可以在其中输入一些内容到富文本字段(ckeditor)。
用户只需从另一个文档中复制粘贴数据即可。有时,数据开头有空<p>
个标记。以下是数据样本:
<p></p>
<p></p>
<p></p>
<p>Data data data data</p>
<p>Data data data data</p>
<p>Data data data data</p>
<p>Data data data data</p>
<p></p>
<p></p>
<p>Data data data data</p>
<p>Data data data data</p>
<p></p>
我不想删除所有空的<p>
标记,只删除实际数据之前的标记,在这种情况下删除前3个<p>
标记。
我该怎么做?
编辑:为了澄清,我需要一个PHP解决方案。 Javascript不会。
有没有办法可以收集数组中的所有<p>
个标签,然后迭代并删除,直到遇到数据?
答案 0 :(得分:3)
通常我建议不要使用正则表达式来解析HTML,但这个似乎无害:
$html = preg_replace('!^(<p></p>\s*)+!', '', $html);
答案 1 :(得分:2)
请不要将正则表达式用于不规则字符串:stirs the sleeping god。相反,使用XPath:
function strip_opening_lines($html) {
$dom = new DOMDocument();
$dom->preserveWhitespace = FALSE;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$nodes = $xpath->query("//p");
foreach ($nodes as $node) {
// Remove non-significant whitespace.
$trimmed_value = trim($node->nodeValue);
// Check to see if the node is empty (i.e. <p></p>).
// If so, remove it from the stack.
if (empty($trimmed_value)) {
$node->parentNode->removeChild($node);
}
// If we found a non-empty node, we're done. Break out.
else {
break;
}
}
$parsed_html = $dom->saveHTML();
// DOMDocument::saveHTML adds a DOCTYPE, <html>, and <body>
// tags to the parsed HTML. Since this is regular data,
// we can use regular expressions.
preg_match('#<body>(.*?)<\/body>#is', $parsed_html, $matches);
return $matches[1];
}
出现所有正则表达式解决方案的原因很糟糕:
<p class="foo"></p>
)<p> </p>
)答案 2 :(得分:0)
使用
$html = preg_replace ("~^(<p><\/p>[\s\n]*)*~iUmx", "", $html);
答案 3 :(得分:-2)
您可以在javascript中执行此操作,只要执行粘贴操作,使用正则表达式删除不需要的标记,
你的代码就像,
document.getElementById("id of rich text field").onkeyup = stripData;
document.getElementById("id of rich text field").onmouseup = stripData;
function stripData(){
document.getElementById("id of rich text field").value = document.getElementById("id of rich text field").value.replace(/\<p\>\<\/p\>/g,"");
}
编辑:仅删除初始空白
,
function stripData(){
var dataStr = document.getElementById("id of rich text field").value
while(dataStr.match(/^\<p\>\<\/p\>/g)) {
dataStr = dataStr .replace(/^\<p\>\<\/p\>/g,"");
}
document.getElementById("id of rich text field").value = dataStr;
}