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

Php 从截断的HTML字符串关闭标记,php,html,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 多么美好的一天 你看了多漂亮、多暖和的房子啊 例如: $o

我继承了一个带有新闻部分的站点,其中显示了新闻文章的摘要。无论出于什么原因,创作者决定显示文章的前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
多么美好的一天 你看了多漂亮、多暖和的房子啊

例如:

$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;
$options=array(“仅显示正文”=>true);
$tidy=tidy_parse_string(“你好吗?”,$options);
整洁、清洁、维修($TIDDY);
echo$tidy;
产出:

<b>Hello</b> How are <u>you?</u> 
你好,你好吗?
最好的办法可能是找到一种更好的算法来生成摘录,例如在截断之前运行strip_标记


否则,您将如何处理难以发现的编程错误,例如
,我将为其安装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;

这是一个完美的例子,正好说明了我的观点——我甚至会把它添加到我的问题中。至于修复新闻部分,这可能是不太可能的。我能够证明修复摘要的成本是合理的,但我怀疑我是否能够证明重新编写新闻部分的大部分内容是合理的。不幸的是,我无法使用列出的整洁选项(我更喜欢),因为它没有安装在服务器上,并且出于可移植性的原因,我无法安装它。所以我不得不把所有的标签都去掉。不太理想,但足够好。下次上班时我会看一看。你知道它将如何处理@Emil Vikström建议的部分标记吗?至少它会关闭标记,所以
多好的
我下次上班时会看一看。你知道它将如何处理像@Emil Vikström建议的部分标记吗?一点也不漂亮--
多么美好和温暖的天气啊

。但是,您可以在输出上调用
strip_标记
,以获得更好的结果,例如
多么美好和温暖的天气