子字符串会导致不完整的html标记

时间:2012-06-01 11:50:50

标签: php html formatting substring

我正在使用子字符串扩展/缩小博客文章,其中第二个子字符串位于div标签内,当按下按钮时激活该标签(因此连接两个子字符串)

代码如下所示:

<?php echo substr($f2, 0, 50);?>
<div id="<?php echo $f4; ?>" class = "hidden">
<?php echo substr($f2, 0, 5000);?></div>

我的问题是,如果博客帖子包含html标签(例如&lt; \ li&gt;,&lt; \ p&gt;)并且初始子字符串在该组标记终止之前结束,那么显然它会导致严重的格式问题。 有没有办法解决这个问题,使用我当前的方法,或者我需要使用类似XML样式表的东西(在这种情况下请引导我完成它)

编辑:

我已经使用DOMDocument半完成了我的请求。

$second = substr($f2, 50, 5000);
$dom= new DOMDocument();
    $dom->loadHTML($second);      
    $xpath = new DOMXPath($dom);
    $body = $xpath->query('/html/body');
$secondoutput = ($dom->saveXml($body->item(0)));


$first = substr($f2, 0, 50);
$dom= new DOMDocument();
    $dom->loadHTML($first);      
    $xpath = new DOMXPath($dom);
    $body = $xpath->query('/html/body');
$firstoutput = ($dom->saveXml($body->item(0)));

这样做除外,当第二个子字符串被调用时,它不再具有先前的格式,因为它已被净化。 有没有办法在调用第二个子字符串时重新连接上一个HTML标记?

3 个答案:

答案 0 :(得分:0)

您可能希望使用Tidy来修复截断的HTML。

答案 1 :(得分:0)

您可能希望使用DOMDocument或SimpleHTMLDOM解析整个HTML代码,然后删除最后一个元素,直到帖子足够短。

答案 2 :(得分:0)

此问题有不同的解决方案,但substr并不是特别合适(正如您所提到的)。 您可以使用正则表达式或HTML-Parser。

继续并从this question复制解决方案。