PHP:仅删除前几个空<;p>;标签
我有一个自定义开发的CMS,用户可以在其中输入一些内容到富文本字段(ckeditor) 用户只需从另一个文档复制粘贴数据。有时数据的开头有空的PHP:仅删除前几个空<;p>;标签,php,regex,content-management-system,Php,Regex,Content Management System,我有一个自定义开发的CMS,用户可以在其中输入一些内容到富文本字段(ckeditor) 用户只需从另一个文档复制粘贴数据。有时数据的开头有空的标记。以下是数据示例: <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>
<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>
数据数据
数据数据
数据数据
数据数据
数据数据
数据数据
我不想删除所有空的
标记,只删除实际数据之前的标记,在本例中是前3个
标记
我该怎么做
编辑:为了澄清,我需要一个PHP解决方案。Javascript不行
是否有一种方法可以将所有
标记收集到一个数组中,然后迭代并删除,直到遇到一个带有数据的标记?您可以在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,"");
}
document.getElementById(“富文本字段的id”).onkeyup=stripData;
document.getElementById(“富文本字段的id”).onmouseup=stripData;
函数stripData(){
document.getElementById(“富文本字段的id”).value=document.getElementById(“富文本字段的id”).value.replace(/\\\/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;
}
函数stripData(){
var dataStr=document.getElementById(“富文本字段的id”).value
while(dataStr.match(/^\\/g)){
dataStr=dataStr.replace(/^\\/g,“”);
}
document.getElementById(“富文本字段的id”).value=dataStr;
}
您可以在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,"");
}
document.getElementById(“富文本字段的id”).onkeyup=stripData;
document.getElementById(“富文本字段的id”).onmouseup=stripData;
函数stripData(){
document.getElementById(“富文本字段的id”).value=document.getElementById(“富文本字段的id”).value.replace(/\\\/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;
}
函数stripData(){
var dataStr=document.getElementById(“富文本字段的id”).value
while(dataStr.match(/^\\/g)){
dataStr=dataStr.replace(/^\\/g,“”);
}
document.getElementById(“富文本字段的id”).value=dataStr;
}
通常我会建议不要使用正则表达式来解析HTML,但这一个似乎是无害的:
$html = preg_replace('!^(<p></p>\s*)+!', '', $html);
$html=preg_replace('!^(\s*)+!',''$html);
通常我会建议不要使用正则表达式来解析HTML,但这一个似乎是无害的:
$html = preg_replace('!^(<p></p>\s*)+!', '', $html);
$html=preg_replace('!^(\s*)+!',''$html);
使用
$html=preg\u replace(“~^([\s\n]*)*~iUmx”,”,$html);
使用
$html=preg\u replace(“~^([\s\n]*)*~iUmx”,”,$html);
请不要对不规则字符串使用正则表达式:它是。相反,请使用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];
}
function strip\u opening\u行($html){
$dom=新的DOMDocument();
$dom->preserveWhitespace=FALSE;
$dom->loadHTML($html);
$xpath=newdomxpath($dom);
$nodes=$xpath->query(“//p”);
foreach($node作为$node){
//删除不重要的空白。
$trimmed_value=trim($node->nodeValue);
//检查节点是否为空(即)。
//如果是,请将其从堆栈中移除。
if(空($U值)){
$node->parentNode->removeChild($node);
}
//如果我们找到了一个非空节点,我们就完成了。
否则{
打破
}
}
$parsed_html=$dom->saveHTML();
//保存HTML添加一个DOCTYPE,然后
//标记。由于这是常规数据,
//我们可以使用正则表达式。
preg#u match('#(.*)#is',$parsed_html,$matches);
返回$matches[1];
}
所提供的所有正则表达式解决方案都不好的原因:
- 将空段落元素与属性不匹配(例如
) - 不匹配不是字面上为空的空段落元素(例如
)
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];
}
function strip\u opening\u行($html){
$dom=新的DOMDocument();
$dom->preserveWhitespace=FALSE;
$dom->loadHTML($html);
$xpath=newdomxpath($dom);
$nodes=$xpath->query(“//p”);
foreach($node作为$node){
//删除不重要的空白。
$trimmed_value=trim($node->nodeValue);
//检查节点是否为空(即)。
//如果是,请将其从堆栈中移除。
if(空($U值)){
$node->parentNode->removeChild($node);
}
//如果我们找到了一个非空节点,我们就完成了。
否则{
打破
}
}
$parsed_html=$dom->saveHTML();
//保存HTML添加一个DOCTYPE,然后
//标记。由于这是常规数据,
//我们可以使用正则表达式。
preg#u match('#(.*)#is',$parsed_html,$matches);
返回$matches[1];
}
所提供的所有正则表达式解决方案都不好的原因:
- 将空段落元素与属性不匹配(例如
) - 不匹配不是字面上为空的空段落元素(例如
)
标记。这不是我想做的。事实上,在这两种情况下,这将击中所有空的
标记。。。不仅仅是前三个。我已经更新了javascript版本,您可以使用将javascript转换为适当的PHP语法&这并不理想。如果