我有一个变量 $example,其中包含我需要渲染/回显到屏幕的 html 内容。但在渲染到屏幕之前,我想删除某些元素。例如 $example 变量的结构是:
<form> some stuff here... </form><p>hi there</p><div></div>
我想在渲染之前从 $example 变量中删除表单元素。我知道我可以使用正则表达式来做到这一点,但是在 php 中更好的方法是什么?另外,php中有没有像strip_tags这样的函数,可以准确地传递它需要剥离的标签?我的问题与剥离不安全标签或清理 html 无关,只是我想在输出之前从变量中删除某些元素。作为一般化,我如何从 $example 变量中仅删除那些添加了特定类的 div?
不要使用 PHP 来修改 HTML,而是使用打印样式表来更改布局。
http://www.webcredible.co.uk/user-friend-resources/css/print-stylesheet.shtml
澄清后进行编辑:
我仍然认为样式表是隐藏内容的方法。如果您不是为了安全目的而剥离标签,那么我真的不知道您通过剥离内容服务器端到底想要实现什么目的。
strip_tags
允许的标签名称列表$allowable_tags
:
// strip any tag except P and DIV
$clean = strip_tags($str, '<p><div>');
如果你想做一个更可调整的过滤,我会使用像 DOMDocument 这样的 HTML 解析器,遍历 DOM 树并删除我不想要的节点。
在打印 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;
}
如果您使用 XHTML,则可以使用 XML 工具(如 DOM 扩展或 SimpleXML)。
preg_replace($regex, "", $example);
我不太擅长正则表达式,但 $regex 将包含表单开放标记,后跟通配符,然后形成关闭标记,从而删除其中包含的所有内容
编辑:$regex =“
/<form.*\/form>/s
”;
你可以使用 $content = strip_tags($content, '
'); 或者直接找到第一个和第一个的位置,然后删除里面的内容。使用 strpos($content , '
您可以使用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];
}