我遇到了WordPress模板的轻微编码问题。这是我在模板中使用的代码:
<?php echo teaser(40); ?>
在我的函数中,我使用它来剥离标记并仅从允许的标记中获取内容。
<?php
function teaser($limit) {
$content = explode(' ', get_the_content(), $limit);
if (count($content)>=$limit) {
array_pop($content);
$content = implode(" ",$content).'...';
} else {
$content = implode(" ",$content);
}
$content = preg_replace('/\[.+\]/','', $content);
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
$content = strip_tags($content, '<p><a><ul><li><i><em><strong>');
return $content;
}
?>
问题:我使用上面的代码从内容中删除标签,但WordPress已将图像标签放在段落中。因此,结果是空段落标记,其中图像被剥离。
只是为了清理我的代码和无用的空标签。 我的问题是如何删除空段落标签?
<p></p>
提前多多感谢! :)
答案 0 :(得分:43)
使用此正则表达式删除空段
/<p[^>]*><\\/p[^>]*>/
例如
<?php
$html = "abc<p></p><p>dd</p><b>non-empty</b>";
$pattern = "/<p[^>]*><\\/p[^>]*>/";
//$pattern = "/<[^\/>]*>([\s]?)*<\/[^>]*>/"; use this pattern to remove any empty tag
echo preg_replace($pattern, '', $html);
// output
//abc<p>dd</p><b>non-empty</b>
?>
答案 1 :(得分:26)
即使它们内部包含p
或spaces
,也会删除所有空&nbps;
个标记。
$str = "<p> </p><p> </p><p> </p><p>Sample Text</p>";
echo preg_replace("/<p[^>]*>[\s| ]*<\/p>/", '', $str);
这只会回应<p>Sample Text</p>
答案 2 :(得分:4)
此函数删除空元素,然后删除从先前删除的元素创建的其他空元素。 (示例字符串包含空格,制表符和回车符。)
function teaser( $html ) {
$html = str_replace( ' ', ' ', $html );
do {
$tmp = $html;
$html = preg_replace(
'#<([^ >]+)[^>]*>[[:space:]]*</\1>#', '', $html );
} while ( $html !== $tmp );
return $html;
}
有以下例子:
<?php
$html = '
<p>Hello!
<div class="foo">
<p id="nobody">
<span src="ok"> </span>
</p>
</div>
</p>
';
echo teaser( $html );
?>
该函数返回:
<p>Hello!
</p>
答案 3 :(得分:3)
使用str_replace删除空<p></p>
标记。
$content = str_replace("<p></p>","",$content);
任何更高级的东西都需要正则表达式。
答案 4 :(得分:2)
$content = preg_replace('/<p[^>]*?></p>/', $content);
更新:应该是:
$content = preg_replace('/<p [^>]*></p>/', $content);
答案 5 :(得分:-7)
从strip_tags调用中删除<p>
标记。第二个参数列出了可接受的标签(不会被剥离)。
$content = strip_tags($content, '<a><ul><li><i><em><strong>');
答案 6 :(得分:-8)
您是否尝试过CSS3解决方案?
p:empty {display: none;}