为了账号安全,请及时绑定邮箱和手机立即绑定

使用 substr 抓取前 x 个字符时如何跳过 HTML 标签

使用 substr 抓取前 x 个字符时如何跳过 HTML 标签

PHP
墨色风雨 2023-09-08 21:48:38
在一些博客文件中,我在 500 个字符后使用“阅读更多”按钮。要从字符串(即博客消息)中获取前 500 个字符,我使用substr如下所示:$blog_message_reduced = substr($blog_message, 0, 500);该字符串$blog_message如下所示:lorem ipsum is simply dummy text of the printing and typesetting industry <img src="data/uploads/image.jpg" class="img-responsive" style="width: 100%" /> and some more text behind the image....有时,当我撰写博客文章时,500 个字符的限制恰好位于img 标签内。$blog_message_reducedHTML 输出类似于:lorem ipsum is simply dummy text of the <img src="data/uplo在上面的例子中, “uploads”一词的o已达到 500 。所以我正在寻找一种方法,img在substr使用 500 进行裁剪时忽略标签。(img达到 500 时切勿剪切标签;在这种情况下,请在标签后立即剪切img)。我怎样才能实现这个目标?
查看完整描述

1 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

在裁剪之前使用 PHP 的strip_tags()进行此操作。

<?php


$str = 'lorem ipsum is simply dummy text of the printing and typesetting industry <img src="data/uploads/image.jpg" class="img-responsive" style="width: 100%" /> and some more text behind the image.... ';

$pre = strip_tags($str);

$crop = substr($pre, 0, 100);

echo $crop;


// Output:

// lorem ipsum is simply dummy text of the printing and typesetting industry and some more text behind

或者与一些更高级的用法相同


<?php


$str = 'lorem ipsum is simply dummy text of the printing and typesetting industry <img src="data/uploads/image.jpg" class="img-responsive" style="width: 100%" /> and some more text behind the image.... ';

echo crop($str, 100, '... (read more)', true, true);


function crop($content, $maxCharacters, $append = '...', $respectWordBoundaries = false, $stripTags = false)

{

    if ($stripTags) {

        $content = strip_tags($content);

    }


    if ($maxCharacters) {

        if (mb_strlen($content, 'utf-8') > abs($maxCharacters)) {

            $truncatePosition = false;

            if ($maxCharacters < 0) {

                $content = mb_substr($content, $maxCharacters, null, 'utf-8');

                if ($respectWordBoundaries) {

                    $truncatePosition = strpos($content, ' ');

                }

                $content = $truncatePosition ? $append . substr($content, $truncatePosition) : $append . $content;

            } else {

                $content = mb_substr($content, 0, $maxCharacters, 'utf-8');

                if ($respectWordBoundaries) {

                    $truncatePosition = strrpos($content, ' ');

                }

                $content = $truncatePosition ? substr($content, 0, $truncatePosition) . $append : $content . $append;

            }

        }

    }

    return $content;

}




查看完整回答
反对 回复 2023-09-08
  • 1 回答
  • 0 关注
  • 68 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信