我继承了一个包含新闻部分的网站,该部分显示了新闻文章的摘要。无论出于何种原因,创作者都决定显示文章的前X个字符就可以了。当然,这很快就会导致总结如下:
<p>What a mighty fine <a href="blah">da
<p>What a mighty fine and warm <a href="htt
<p>His name was "Emil&qu
这显然与页面紧密相关,尤其是当开启标签甚至没有关闭时。
我所追求的是一种关闭所拍摄字符串中所有打开标签的方法。我真的真的不想使用正则表达式来做这件事。我确信有一个很好的解析器可以轻松完成,我现在似乎无法找到它。
答案 0 :(得分:2)
你看过Tidy吗?
示例:
$options = array("show-body-only" => true);
$tidy = tidy_parse_string("<B>Hello</I> How are <U> you?</B>", $options);
tidy_clean_repair($tidy);
echo $tidy;
输出:
<b>Hello</b> How are <u>you?</u>
答案 1 :(得分:2)
最好的办法可能是找到一个更好的算法来生成摘录,例如在截断之前运行strip_tags。
您如何处理难以查找的程序错误,例如<p>What a mighty fine and warm <a href="htt
或<p>His name was "Emil&qu
?
答案 2 :(得分:1)
我会为Tidy安装PHP绑定。然后,您可以使用以下代码清理HTML片段:
<?php
$fragment = '<p>What a mighty fine <a href="blah">da';
$tidy = new tidy();
$tidy->parseString($fragment,array('show-body-only'=>true),'utf8');
$tidy->cleanRepair();
echo $tidy;