3

我正在使用 Richtext 框控件在一页中发布一些数据。我正在使用 HTML 标记将数据保存到我的 db 表中 例如:这是 <b >my bold </b > text

我在另一页中显示此列的前 50 个字符。现在当我保存时,如果我保存一个带有粗体标签的句子(超过 50 个字符),并且在我修剪它时(用于获取前 50 个字符)在我的其他页面中,我会丢失结束 b 标签(</b> ) 。因此,粗体将应用于我在该页面中的其余内容。

我该如何解决这个问题?我如何检查哪些所有打开的标签都没有关闭?有没有简单的方法在 PHP 中做到这一点。是否有任何功能可以删除我的整个 HTML 标签/标记并将句子作为纯文本给我?

4

4 回答 4

3

http://php.net/strip_tags

strip_tags 函数将删除您可能拥有的任何标签。

于 2009-04-29T05:43:52.783 回答
2

是的

$textWithoutTags = strip_tags($html);
于 2009-04-29T05:44:21.643 回答
1

我通常为此使用HTML::Truncate。当然,作为 Perl 模块,您将无法直接在 PHP 中使用它——但源代码确实显示了一种可行的方法(即使用 HTML 解析器)。

另一种方法可能是按照您目前的操作进行截断,然后尝试使用Tidy修复它。

于 2009-04-29T15:03:59.503 回答
1

如果您希望保留 HTML 标签,但要正确关闭,请参阅PHP:截断 HTML,忽略标签。否则,请继续阅读:

strip_tags将删除 HTML 标记,但不会删除 HTML 实体(例如&amp;),如果被截断,仍可能导致问题。

为了处理实体,可以使用html_entity_decode在剥离标签后解码实体,然后修剪,最后使用htmlspecialchars重新编码实体:

$text = "1 &lt; 2\n";
print $text;
print htmlspecialchars(substr(html_entity_decode(strip_tags($text), ENT_QUOTES), 0, 3));

(注意使用 ENT_QUOTES 来实际转换所有实体。)

结果:

1 < 2
1 <

脚注:以上内容仅适用于可以解码为 ISO-8859-1 的实体。如果您需要对国际字符的支持,您应该已经在使用 UTF-8 编码的字符串,并且只需要在调用html_entity_decode时指定它。

于 2010-10-08T15:20:44.360 回答