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

时间:2009-08-12 09:02:16

标签: php html

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

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

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

7 个答案:

答案 0 :(得分:4)

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

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

在澄清后编辑:
我仍然认为样式表是隐藏内容的方式。如果你没有出于安全目的剥离标签,那么我真的不知道你试图通过剥离内容服务器端来实现什么。

答案 1 :(得分:2)

您可以使用第二个参数$allowable_tags传递strip_tags允许的标记名称列表:

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

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

答案 2 :(得分:1)

使用print css中的display css属性:

你的print.css文件的html balise:

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

您的表单说明:

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

您的print.css文件

.pouet {
    display:none;
}

答案 3 :(得分:1)

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

答案 4 :(得分:1)

preg_replace($regex, "", $example);

我不是很擅长正则表达式,但是$ regex会包含表单打开标记后跟一个通配符然后形成close标记,从而删除

中包含的所有内容

修改:$ regex =“/<form.*\/form>/s”;

答案 5 :(得分:1)

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

'); 或者只是找到第一个和第一个的位置,并删除其中的内容。使用strpos($ content,'

答案 6 :(得分:0)

您可以使用explode()按<form></form>标记拆分sting,并只包含您想要的块:

$arr1 = explode("<form>",$example);
$example = $arr1[0];
for ($i=1;$i<count($arr1);$i++)
{
    $arr2 = explode("</form>",$arr1[$i]);
    $example .= $arr2[1];
}