我有一个变量$ example,其中包含我需要渲染/回显到屏幕的html内容。但在渲染到屏幕之前,我想删除某些元素。例如,$ example变量的结构是:
<form> some stuff here... </form><p>hi there</p><div></div>
我想在渲染之前从$ example变量中删除表单元素。我知道我可以使用正则表达式来做到这一点,但是什么是在PHP中更好的方法呢?另外,在php中是否有像strip_tags这样的函数,它可以准确地传递它需要剥离的标签?我的问题与剥离不安全标签或清理html无关,只是我想在输出之前从变量中删除某些元素。作为一个generatlization,我如何只从$ example变量中删除那些添加了特定类的div?
答案 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)
'); 或者只是找到第一个和第一个的位置,并删除其中的内容。使用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];
}