我的网站上有一个评论系统,一些用户写了很长的评论,超过500个字符,我需要在200之后剪切它并添加选项&#34;查看更多&#34;。问题是,用户可以使用<a>test</a>
代码,在某些情况下,200个字符的限制会削减中间的代码,例如<a>t
或<a
或<a>test</
如果有的话在上述情况发生时,限制应该延伸到html标记的末尾,所以ex <a>test</a>
我有这段代码:
function truncate($string,$length=200,$append="…") {
$string = trim($string);
if(strlen($string) > $length) {
$string = wordwrap($string, $length);
$string = explode("\n", $string, 2);
$string = $string[0] . $append;
}
return $string;
}
知道如何制作这个吗?
由于
答案 0 :(得分:4)
function cut_text($string, $length = 350, $append = "…")
{
$string = trim($string);
$string_length = strlen($string);
$original_string = $string;
if ($string_length > $length) {
$remaining_chars = $string_length - $length;
if (strpos($string, '<') !== false && strpos($string, '>') !== false) {
$string = wordwrap($string, $length);
$string = explode("\n", $string, 2);
$string = $string[0] . $append;
$fillimi = substr_count($string, '<');
$fundi = substr_count($string, '>');
if ($fillimi == $fundi) {
$string = $string;
} else {
$i = 1;
while ($i <= $remaining_chars) {
$string = wordwrap($original_string, $length + $i);
$string = explode("\n", $string, 2);
$new_remaining_chars = $string_length - ($length + $i);
if ($new_remaining_chars > 0) {
$string = $string[0] . $append;
} else {
$string = $string[0];
}
$fillimi = substr_count($string, '<');
$fundi = substr_count($string, '>');
if ($fillimi == $fundi) {
$string = $string;
break;
}
$i++;
}
}
} else {
$string = trim($string);
$string = wordwrap($string, $length);
$string = explode("\n", $string, 2);
$string = $string[0] . $append;
}
}
return $string;
}
答案 1 :(得分:1)
我认为应该已经在互联网上的某处,但无法找到它。您基本上需要做的是计算已打开的标签,然后如果有更多打开的标签而不是关闭,它是打开的,不能切割。 Here可以帮助您正确指导如何轻松计算打开和关闭的标签数量。