PHP限制文本字符串不包括html标签?

2023-11-27

这是对我不起作用的:

<?php
 $string = 'I have a dog and his name is <a href="http://www.jackismydog.com">Jack</a> and I love him very much because he\'s my favorite dog in the whole wide world and nothing could make me not love him, I think.';
 $limited = substr($string, 0, 100).'...';
 echo $string;
?>

我想将可见文本限制为 100 个字符,但使用substr()还包括限制中的不可见文本(<a href="http://www.jackismydog.com"> and </a>) 占用了 100 个可用字符中的 41 个。

有没有办法限制文本,以便链接中的“Jack”一词包含在限制中,但不包含在内<a href="http://www.jackismydog.com"> or </a>?

编辑: 我想将链接保留在字符串中,只是不将其长度计入限制。


截断 HTML 代码中单词的函数:

//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com
function truncate($text, $length, $suffix = '&hellip;', $isHTML = true) {
    $i = 0;
    $simpleTags=array('br'=>true,'hr'=>true,'input'=>true,'image'=>true,'link'=>true,'meta'=>true);
    $tags = array();
    if($isHTML){
        preg_match_all('/<[^>]+>([^<]*)/', $text, $m, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
        foreach($m as $o){
            if($o[0][1] - $i >= $length)
                break;
            $t = substr(strtok($o[0][0], " \t\n\r\0\x0B>"), 1);
            // test if the tag is unpaired, then we mustn't save them
            if($t[0] != '/' && (!isset($simpleTags[$t])))
                $tags[] = $t;
            elseif(end($tags) == substr($t, 1))
                array_pop($tags);
            $i += $o[1][1] - $o[0][1];
        }
    }

    // output without closing tags
    $output = substr($text, 0, $length = min(strlen($text),  $length + $i));
    // closing tags
    $output2 = (count($tags = array_reverse($tags)) ? '</' . implode('></', $tags) . '>' : '');

    // Find last space or HTML tag (solving problem with last space in HTML tag eg. <span class="new">)
    $pos = (int)end(end(preg_split('/<.*>| /', $output, -1, PREG_SPLIT_OFFSET_CAPTURE)));
    // Append closing tags to output
    $output.=$output2;

    // Get everything until last space
    $one = substr($output, 0, $pos);
    // Get the rest
    $two = substr($output, $pos, (strlen($output) - $pos));
    // Extract all tags from the last bit
    preg_match_all('/<(.*?)>/s', $two, $tags);
    // Add suffix if needed
    if (strlen($text) > $length) { $one .= $suffix; }
    // Re-attach tags
    $output = $one . implode($tags[0]);

    //added to remove  unnecessary closure
    $output = str_replace('</!-->','',$output); 

    return $output;
}

Source: http://snippets.dzone.com/posts/show/7125

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP限制文本字符串不包括html标签? 的相关文章

  • 在php中生成随机字符串作为文件名[重复]

    这个问题在这里已经有答案了 我将如何创建与文件名一起使用的随机文本字符串 我正在上传照片并在完成后重命名它们 所有照片都将存储在一个目录中 因此它们的文件名必须是唯一的 有这样做的标准方法吗 有没有办法在尝试覆盖之前检查文件名是否已经存在
  • 将来自另一个表的每行作为数组连接起来

    我正在使用 PHP 为自己编写一个电影存档脚本 我正在从 IMDb 获取电影信息并将其添加到我的数据库中 我正在使用另一个名为 链接 的表添加我选择的电影的链接 这是我用来从数据库获取电影的查询 movies this gt db gt q
  • 注意:php中数组到字符串的转换

  • 如何将控制器放入 Laravel 5.1.3 的文件夹中?

    我是 Laravel 的新手 我试图通过将控制器放入文件夹中来组织控制器 但它似乎不起作用 我的文件夹结构是这样的 app Http Controllers Admin ShowDashboard php My 显示仪表板 php文件是这样
  • SHA 足以检查文件重复吗? (PHP 中的 sha1_file)

    假设您想创建一个文件托管站点 供人们上传文件并向他们的朋友发送链接以供稍后检索 并且您想确保文件在我们存储文件的位置重复 那么 PHP 的 sha1 file 是否足以完成该任务 有什么理由不使用 md5 file 来代替吗 对于前端 它将
  • 掌握 CodeIgniter - 模板化/加载视图

    尝试学习 CI 并浏览文档以获得更好的理解 如果没有单独的库 我可以通过包含视图列表来制作模板 如下所示 this gt load gt view header this gt load gt view navigation this gt
  • require_once 中的相对路径不起作用

    我有以下结构 otsg gt class gt authentication php gt database php gt user php gt include gt config inc php gt encryption php gt
  • Drupal - 使用引导程序检查 Drupal 之外的登录用户不起作用

    我正在绞尽脑汁地想弄清楚这个问题 在 Drupal 目录之外时 我无法让 Bootstrap 正常工作 如果我在 Drupal 目录中运行此代码 它可以正常工作 但向上一级不起作用 我的 Drupal 路径是 public html dru
  • 使用 'with' 时 Laravel ownsTo 返回 null

    我刚刚开始使用 Laravel 所以请原谅任何菜鸟 我有一个User and Order模型中 一个用户有多个订单 Inside User model public function orders this gt hasMany Order
  • 如何在没有 --prefer-source 的情况下使用 Composer 克隆存储库? (使用 Symfony 2)

    场景 我正在使用 Symfony 2 2 在我的所需包列表中也是我的 github 存储库之一 我们将其称为 TestLib 我知道我可以将 github url 定义为 Symfony 的composer json 中的附加存储库 以通过
  • php 的问题:读取文件名,生成 javascript 和 html

    UPDATE 再一次问好 我发现自己遇到了一个新问题 php代码在我的PC wamp服务器 上完美运行 但我现在已将其上传到免费的网络主机服务器上 虽然php部分运行完美 它生成数组 但javascript函数本身不起作用 因为没有照片在网
  • 在 PHP 中 RESTful 上传文件

    因此 我正在编写一个脚本 该脚本将通过 RESTful 接口将视频上传到服务器 文档告诉我 我应该将数据 包括二进制视频文件 作为 POST 请求的一部分传递 我知道如何设置我的 POST 变量 但我不知道如何处理二进制数据 API 说我应
  • phpunit 避免模拟的构造函数参数

    有什么方法可以避免 phpunit 调用模拟对象的构造函数 否则我需要一个模拟对象作为构造函数参数 另一个模拟对象作为构造函数参数 等等 api 似乎是这样的 getMock className methods array array ar
  • 如何从字符串创建对象?

    我尝试了下面的代码 dyn new className param1 param2 obj eval dyn 它编译但它是空的 如何在 PHP 中动态实例化对象 class ClassName obj new class arg1 arg2
  • 删除 PHP 中的标头

    为了允许缓存 PHP 生成的文件 我想确保 Pragma no cache 标头是not放 但是 如何删除可能已经设置的标头 这就对了could有可能 有人在代码中的某个地方写了header Pragma no cache 现在我想确保标头
  • 插入到 wordpress 数据库 - 调用成员函数 insert()

    我在通过我的插件将数据插入 WordPress 数据库时遇到问题 我的插件使用短代码来显示一个表单 从中进行一些计算 然后该信息应该被插入到数据库中 但我最终收到了此消息 我似乎无法让它工作 任何帮助将不胜感激 用于插入的插件代码 incl
  • php 中

    的新行

    我目前在数据库中有很多笑话 这些笑话都是用 nl2br 格式化的 它会产生 This is just dummy text Lorem ipsum dolor sit amet consectetur adipiscing elit br
  • cmd的字符集

    C Users Kolink gt php r echo C Users Kolink gt echo 正如你所看到的 一个程序输出一个 结果是 但使用echo命令给出所需的字符 并且 我可以配置 PHP 也许是脚本开头的某个命令 来输出正
  • 根据当前配置,没有映射 Doctrine ORM 实体

    我有一个可疑的问题 我有一组现有的带注释的 Doctrine 实体 它们已在 Symfony2 Doctrine2 项目中成功使用 然而 我目前正在将该项目的一些核心功能隔离到它自己的 Web 框架独立库中 但我似乎无法让这些实体正常运行
  • 设计问题:哪种做法更好? (第2部分)

    我有一个 Web 界面 我将从中收集用户数据 用户名 密码 电子邮件等 后端必须将这些数据提供给 3 个其他系统 SystemA SystemB SystemC 配置由 3 个不同的 API 完成 每个 API 对应一个系统 A B 和 C

随机推荐

  • PostgreSQL的括号规则,有总结指南吗?

    在数学和许多编程语言中 我认为标准SQL也 括号改变优先级 首先对要评估的部分进行分组 或增强可读性 对于人眼 等效示例 SELECT array 1 2 gt array 1 SELECT array 1 2 gt array 1 SEL
  • jQuery 文本到链接脚本? [复制]

    这个问题在这里已经有答案了 有谁知道有一个脚本可以选择对 URL 的所有文本引用并自动将其替换为指向这些位置的锚标记 For example http www google com would automatically turn into
  • 在 Safari iOS 13 + 上禁用双击缩放

    如何在 Safari iOS 13 移动设备上禁用 双击缩放 有时会缩放 有时则不会 我觉得它可能只适用于特定的 HTML 元素 我读到 双击缩放 应该在 iOS 13 上默认禁用 只有捏合缩放才可以工作 但事实并非如此 您可以添加以下元标
  • ReactJS onClick setState 到不同的元素

    我是新来反应的 我遇到了一个小问题 也许有人可以帮助我 所以问题是我无法使用 onCLick 函数触发我想要的元素 现在我试图删除导航 import React from react import ReactDOM from react d
  • jQuery / ajax 上传图像并保存到文件夹

    更新下面的代码 我发现一些代码能够上传图像并显示其缩略图 但是 我也想将图像保存到特定文件夹中 我可以使用什么 jQuery 代码或 ajax 代码将原始图像保存到我选择的文件夹中 这是现场演示 http jsfiddle net dn9S
  • 展平浅嵌套列表的习惯用法:它是如何工作的?

    我在我正在开发的模块中找到了这段代码 l opaque function thingys x for y in l for x in y 我读不懂这个 通过实验 我能够确定它正在展平 2 级嵌套列表 但语法对我来说仍然不透明 它显然省略了一
  • Django REST Framework ValidationError 始终返回 400

    我正在努力强迫ValidationError返回与 400 不同的状态代码 这就是我所做的 class MyValidationError ValidationError status code HTTP 403 FORBIDDEN 然后在
  • 如何重载间接运算符? (C++)

    我正在尝试创建一个迭代器类作为列表类的成员类 并尝试重载间接运算符 以访问它指向的列表 template
  • 如何获取winform的GUI线程?

    我有一个带有多个 GUI 线程的 winforms 应用程序 我希望他们能够访问彼此的线程对象 而不必单独跟踪该信息 NET 中是否有一个函数可以提供 winforms 控件或窗口对象 并返回线程 或者我可以为 threadID pinvo
  • 如何在AS3中播放库中的声音?

    在Flash 10 AS3中 我添加了一些声音 它似乎工作正常 但我认为我做错了 我将声音导入到库中 但我相信它会从包含 swf sound 的文件夹中重新加载它 我像这样加载它们 var request1 URLRequest new U
  • 检测来电的目标电话号码[重复]

    这个问题在这里已经有答案了 我有一部带有 2 张 SIM 卡的 Android 手机 我想检测来电的目标 是 SIM 1 还是 SIM 2 是否可以从通话信息中获取目标号码 您的问题在文档中没有答案 但我发现了一些可以帮助你的链接 检查双卡
  • 导入错误:没有名为 django 的模块

    我在 mac 的 2 5 2 版本旁边安装了 python 2 6 我一这样做 python2 6 manage py runserver就失败了 因为它找不到django core management 从 shell 中 import
  • 解耦 Microsoft.AspNet.Identity.*

    我正在 Visual Studio 2013 RC 中工作 并使用新的测试表单身份验证Microsoft AspNet Identity 包 我想集成这些概念 用户 角色等 但想使用我自己的域模型 POCO 它们位于不同的程序集中 我也不想
  • 将项目添加到 ListView 时触发事件?

    我有这个 XAML
  • MySQL 触发器可以模拟 CHECK 约束吗? [复制]

    这个问题在这里已经有答案了 我想在MySQL中使用CHECK约束 但不支持 与其他 RDBMS 不同 它会理解但不会强制检查 我见过一些带有触发器的解决方法 但他们倾向于为相关字段设置默认值 而不是返回错误 是否可以构造一个触发器 在不满足
  • 尽管通过 FBSDKLoginButton 登录,ios Facebook SDK v4.x 访问令牌仍为空

    尽管按钮显示我已登录 但我的 Facebook 访问令牌为空 有人知道为什么会这样吗 来自 RootViewController m void viewDidLoad super viewDidLoad self gt login butt
  • 浏览器显示比原始尺寸更大的图像

    我的网站显示的图像大于其原始尺寸 这些图像比用 Photoshop 创建的原始图像大 20 例如 如果图像的宽度为 200 像素 则浏览器显示为 240 像素 所以我所有的图像都变得模糊了 你知道为什么吗 我找到了解决方案 Windows
  • sql搜索查询多个可选参数

    我正在尝试为我的文档归档系统上的高级搜索页面编写查询 我正在尝试通过多个可选参数进行搜索 我有大约 5 个参数 它们可以是空字符串或搜索字符串 我知道我不必将每个检查为字符串或空 并为每个组合创建单独的存储过程 编辑 最终使用 ISNULL
  • 强制在 C# 中实现通用接口

    无论如何 是否有强制通用定义的约束来实现 通用接口 也就是说 我希望该类支持传递接口和约束它的通用类 以便该类实现该接口 例如 如果我说 MyGenericClass
  • PHP限制文本字符串不包括html标签?

    这是对我不起作用的 我想将可见文本限制为 100 个字符 但使用substr 还包括限制中的不可见文本 a href http www a