2010-01-04 42 views
2

它推出了很多非封闭标签象下面这样:如何处理html摘录?

(strlen($row['body']) > 200 ? substr($row['body'],0,200) . '...' : $row['body']) 

而且整个页面的布局被打破,如何处理:

<div> 
<table>...</table> 

</div>由这样的代码被截断用它?

+0

这是什么具体到? – 2010-01-04 03:14:05

回答

4

假设$row['body']包含要截断200个可见字符的HTML:

地带HTML标签

这是最快的修复,但可能不是你想要的东西:

$body= strip_tags($row['body']); 
echo(strlen($body) > 200 ? substr($body,0,200) . '...' : $body); 

解析HTML并截断文本

使用PHP的DOMDocument类,您可以解析HTML,检查HTML标记中的文本长度,计算内容中文本的长度,并在保留格式良好的HTML时从$row['body']中的HTML限制字符后删除任何标记。

+0

您可以显示如何使用DOMDOcument执行此操作的示例? – JCM 2012-01-26 16:02:32

0

我假定你已经离开它为简洁,但我没有看到标记

应该

<div> 
<table><tr><td>...</td></tr></table> 

还可以使用下面的你可能有HTML嵌入在$行[“身体”]

(strlen($row['body']) > 200 ? substr($row['body'],0,200) . '...' : htmlspecialchars($row['body'])) 

DC

1

下面是如何创建一个帖子预览或摘录塔为例t包含有效的HTML。它解析使用PHP的DOM文档的HTML作为leepowers建议:

http://bizzybytes.com/html-excerpt-php

+0

如果长度检查是检查文本内容的长度,那么这会更好,但不包括html标签本身。 – 2013-02-27 18:45:34

+0

同意!但是有人说,有人比我更聪明,“过度优化是万恶之源”。更简单的方法是增加$ num_chars以适应更多的实际文本(减去html)。另一个变量和$ node-> textContent的使用会为你带来你想要的。 – Morgan 2013-09-12 22:29:58