在渲染之前从 html 中过滤不需要的元素的最佳方法

问题描述 投票:0回答:7

我有一个变量 $example,其中包含我需要渲染/回显到屏幕的 html 内容。但在渲染到屏幕之前,我想删除某些元素。例如 $example 变量的结构是:

<form> some stuff here... </form><p>hi there</p><div></div>

我想在渲染之前从 $example 变量中删除表单元素。我知道我可以使用正则表达式来做到这一点,但是在 php 中更好的方法是什么?另外,php中有没有像strip_tags这样的函数,可以准确地传递它需要剥离的标签?我的问题与剥离不安全标签或清理 html 无关,只是我想在输出之前从变量中删除某些元素。作为一般化,我如何从 $example 变量中仅删除那些添加了特定类的 div?

php html
7个回答
4
投票

不要使用 PHP 来修改 HTML,而是使用打印样式表来更改布局。

http://www.webcredible.co.uk/user-friend-resources/css/print-stylesheet.shtml

澄清后进行编辑:
我仍然认为样式表是隐藏内容的方法。如果您不是为了安全目的而剥离标签,那么我真的不知道您通过剥离内容服务器端到底想要实现什么目的。


2
投票

您可以使用第二个参数传递

strip_tags
允许的标签名称列表
$allowable_tags
:

// strip any tag except P and DIV
$clean = strip_tags($str, '<p><div>');

如果你想做一个更可调整的过滤,我会使用像 DOMDocument 这样的 HTML 解析器,遍历 DOM 树并删除我不想要的节点。


1
投票

在打印 css 中使用显示 css 属性:

您的 html 应答器到您的 print.css 文件:

<link rel="stylesheet" type="text/css" media="print" href="print.css" />

您的表格描述:

<form class="pouet">
    ...
</form>

您的 print.css 文件

.pouet {
    display:none;
}

1
投票

如果您使用 XHTML,则可以使用 XML 工具(如 DOM 扩展或 SimpleXML)。


1
投票
preg_replace($regex, "", $example);

我不太擅长正则表达式,但 $regex 将包含表单开放标记,后跟通配符,然后形成关闭标记,从而删除其中包含的所有内容

编辑:$regex =“

/<form.*\/form>/s
”;


1
投票

你可以使用 $content = strip_tags($content, '

'); 或者直接找到第一个和第一个的位置,然后删除里面的内容。使用 strpos($content , '


0
投票

您可以使用explode()通过

<form>
</form>
标签分割刺痛,然后只包含您想要的块:

$arr1 = explode("<form>",$example);
$example = $arr1[0];
for ($i=1;$i<count($arr1);$i++)
{
    $arr2 = explode("</form>",$arr1[$i]);
    $example .= $arr2[1];
}
© www.soinside.com 2019 - 2024. All rights reserved.