【问题标题】:How to make php "substr" ignore code for images?如何使 php“substr”忽略图像代码?
【发布时间】:2012-06-18 20:36:10
【问题描述】:

在我的网站上,我有一段代码可以使用 php 的“substr”方法截断一长串文本。但是,如果字符串中有图像的代码,有时会在图像的代码中间将其截断,导致图像无法正常显示?

我该如何解决这个问题?

【问题讨论】:

  • 我们需要查看您的代码才能为您提供任何建议。
  • @Michael 他正在使用substr() 将 HTML 字符串修剪到一定长度。您还需要了解什么?
  • @Blazemonger 我们需要知道他到目前为止所做的尝试、代码的结构、任何可能的怪癖和/或可以进行的改进等。

标签: php substr


【解决方案1】:

在使用substr 之前在文本上调用strip_tags 怎么样?如果您还需要删除实体,也可以使用简单的正则表达式删除它们或添加html_entity_decode

例子:

substr(strip_tags($text), 0, 10);

【讨论】:

    【解决方案2】:

    这是我之前用过的一个函数:

    function trimHTML($text, $max_length) {
        $tags = array();
        $result = "";
    
        $is_open = false;
        $grab_open = false;
        $is_close = false;
        $in_double_quotes = false;
        $in_single_quotes = false;
        $tag = "";
    
        $i = 0;
        $stripped = 0;
    
        $stripped_text = strip_tags($text);
    
        while ($i < strlen($text) && $stripped < strlen($stripped_text) && $stripped < $max_length) {
            $symbol = $text{$i};
            $result .= $symbol;
    
            switch ($symbol) {
                case '<':
                    $is_open = true;
                    $grab_open = true;
                    break;
    
                case '"':
                    if ($in_double_quotes)
                        $in_double_quotes = false;
                    else
                        $in_double_quotes = true;
    
                    break;
    
                case "'":
                    if ($in_single_quotes)
                        $in_single_quotes = false;
                    else
                        $in_single_quotes = true;
    
                    break;
    
                case '/':
                    if ($is_open && !$in_double_quotes && !$in_single_quotes) {
                        $is_close = true;
                        $is_open = false;
                        $grab_open = false;
                    }
    
                    break;
    
                case ' ':
                    if ($is_open)
                        $grab_open = false;
                    else
                        $stripped++;
    
                    break;
    
                case '>':
                    if ($is_open) {
                        $is_open = false;
                        $grab_open = false;
                        array_push($tags, $tag);
                        $tag = "";
                    } else if ($is_close) {
                        $is_close = false;
                        array_pop($tags);
                        $tag = "";
                    }
    
                    break;
    
                default:
                    if ($grab_open || $is_close)
                        $tag .= $symbol;
    
                    if (!$is_open && !$is_close)
                        $stripped++;
            }
    
            $i++;
        }
    
        while ($tags) {
            $result .= "</" . array_pop($tags) . ">";
        }
    
        return $result;
    };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      • 1970-01-01
      相关资源
      最近更新 更多