从截断的HTML字符串中关闭标记

时间:2010-10-24 13:10:06

标签: php html

我继承了一个包含新闻部分的网站,该部分显示了新闻文章的摘要。无论出于何种原因,创作者都决定显示文章的前X个字符就可以了。当然,这很快就会导致总结如下:

<p>What a mighty fine <a href="blah">da
<p>What a mighty fine and warm <a href="htt
<p>His name was &quot;Emil&qu

这显然与页面紧密相关,尤其是当开启标签甚至没有关闭时。

我所追求的是一种关闭所拍摄字符串中所有打开标签的方法。我真的真的不想使用正则表达式来做这件事。我确信有一个很好的解析器可以轻松完成,我现在似乎无法找到它。

3 个答案:

答案 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 &quot;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;