在html结束标记后剪切文本

时间:2014-12-26 10:22:50

标签: php

我的网站上有一个评论系统,一些用户写了很长的评论,超过500个字符,我需要在200之后剪切它并添加选项&#34;查看更多&#34;。问题是,用户可以使用<a>test</a>代码,在某些情况下,200个字符的限制会削减中间的代码,例如<a>t<a<a>test</如果有的话在上述情况发生时,限制应该延伸到html标记的末尾,所以ex <a>test</a>

我有这段代码:

function truncate($string,$length=200,$append="&hellip;") {
  $string = trim($string);

  if(strlen($string) > $length) {
    $string = wordwrap($string, $length);
    $string = explode("\n", $string, 2);
    $string = $string[0] . $append;
  }

  return $string;
}

知道如何制作这个吗?

由于

2 个答案:

答案 0 :(得分:4)

嗯,我想我做到了。如果有人有任何建议,请随时修改此答案或评论。

function cut_text($string, $length = 350, $append = "&hellip;")
{

    $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可以帮助您正确指导如何轻松计算打开和关闭的标签数量。