我有以下2套代码(Wordpress)使用正则表达式,但我被告知这是一个不好的做法。
我以两种方式使用它:
希望以适当的更可接受/跨浏览器形式编写它。
html(显示文字):
<?php
$content = preg_replace('/<blockquote>(.*?)<\/blockquote>/', '', get_the_content());
$content = preg_replace('/(<img [^>]*>)/', '', $content);
$content = wpautop($content); // Add paragraph-tags
$content = str_replace('<p></p>', '', $content); // remove empty paragraphs
echo $content;
?>
html(显示图片):
<?php
preg_match_all('/(<img [^>]*>)/', get_the_content(), $images);
for( $i=0; isset($images[1]) && $i < count($images[1]); $i++ ) {
if ($i == end(array_keys($images[1]))) {
echo sprintf('<div id="last-img">%s</div>', $images[1][$i]);
continue;
}
echo $images[1][$i];
}
?>
答案 0 :(得分:0)
您可以使用此处的答案:Strip Tags and everything in between
重点是使用解析器,而不是自己动手制作可能有错误的正则表达式。
$content = get_the_content();
$content = wpautop($content);
$doc = new DOMDocument();
$doc->loadHTML(get_the_content(), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//blockquote') as $node) {
$node->parentNode->removeChild($node);
}
foreach ($xpath->query('//img') as $node) {
$node->parentNode->removeChild($node);
}
foreach( $xpath->query('//p[not(node())]') as $node ) {
$node->parentNode->removeChild($node);
}
$content = $doc->saveHTML($doc);
您可能会发现php DOMDocument已将您的html片段包装在<html>
个标签中,在这种情况下请查看How to saveHTML of DOMDocument without HTML wrapper?
删除空p
代码的部分来自Remove empty tags from a XML with PHP