Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在呈现之前从html中过滤不需要的元素的最佳方法_Php_Html - Fatal编程技术网

Php 在呈现之前从html中过滤不需要的元素的最佳方法

Php 在呈现之前从html中过滤不需要的元素的最佳方法,php,html,Php,Html,我有一个变量$example,其中包含需要呈现/回显到屏幕的html内容。但在渲染到屏幕之前,我想删除某些元素。例如,$example变量的结构是: <form> some stuff here... </form><p>hi there</p><div></div> 这里有些东西 你好 在呈现之前,我想从$example变量中删除form元素。我知道我可以使用正则表达式来实现这一点,但是在php中有什么更好的方法呢?另

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

<form> some stuff here... </form><p>hi there</p><div></div>
这里有些东西 你好


在呈现之前,我想从$example变量中删除form元素。我知道我可以使用正则表达式来实现这一点,但是在php中有什么更好的方法呢?另外,php中是否有类似strip_标记的函数,可以准确地传递需要剥离的标记?我的问题与剥离不安全的标记或清理html无关,只是我想在输出之前从变量中删除某些元素。作为一种生成方式,如何仅从$example变量中删除添加了特定类的div?

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

澄清后编辑:

我仍然认为样式表是隐藏内容的方式。如果您不是出于安全目的而剥离标签,那么我真的不知道通过剥离content server-side,您到底想要实现什么。

在打印css中使用display css属性:

将html应答器连接到print.css文件:

<link rel="stylesheet" type="text/css" media="print" href="print.css" />
您可以使用第二个参数
$allowed_tags
传递允许的标记名列表:

// strip any tag except P and DIV
$clean = strip_tags($str, '<p><div>');
//除去P和DIV之外的任何标记
$clean=strip_标签($str,);

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

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

preg_replace($regex, "", $example);
我对正则表达式不是很在行,但是$regex将包含form open标记,后跟一个通配符,然后是form close标记,从而删除其中包含的所有内容

编辑:$regex=“
//s

您可以使用 $content=strip_标签($content,); 或者只是找到第一个和第一个的位置,然后删除其中的内容。使用strpos($content,您可以使用explode()按
标记拆分sting,只包含您想要的块:

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

对于($i=1;$iI我认为我的问题根本与打印样式表无关。我问的是如何从将在屏幕上打印为html的字符串中删除某些元素。我不只是想在打印后设置其显示属性。原因是我可能在打印$example变量之前单独打印了表单。任何样式我申请的是$example表格中的一个,而我不想申请的是$example表格中的一个。似乎很多人直接跳到了纸上的“打印”——我做到了——也许尝试“渲染”或“回声”或“显示”?也许你可以解释更多关于你试图解决的问题,而不是立即跳到机械上来。这样你会得到更好的答案。用渲染代替打印以使意思更清楚我认为DOMDocument方法似乎很有希望,只是当我尝试加载字符串时,它开始发出警告,因为字符串包含“”等内容。无法理解如何以这种方式执行。@m.u.sheikh:您是否使用
loadHTML
加载HTML文档?不,我使用的是loadXML,现在我使用loadHTML对其进行了更正,加载很好,现在我正在尝试适当地遍历它,以达到我不想要的元素,并删除它们。
preg_replace($regex, "", $example);
$arr1 = explode("<form>",$example);
$example = $arr1[0];
for ($i=1;$i<count($arr1);$i++)
{
    $arr2 = explode("</form>",$arr1[$i]);
    $example .= $arr2[1];
}