使用 SMARTY 截断 HTML 格式的文本

2024-03-17

我有一个使用随机 HTML 代码格式化的变量。我称其为{$text}我把它截断了。

该值例如:

<div>Lorem <i>ipsum <b>dolor <span>sit </span>amet</b>, con</i> elit.</div>

如果我截断文本的前 30 个字母,我会得到以下结果:

<div>Lorem <i>ipsum <b>dolor <span>sit 

问题是,我无法关闭元素。所以,我需要一个脚本来检查<*>代码中的元素(其中 * 可以是任何内容),如果它没有关闭标记,则关闭它们。

请帮助我。谢谢。

下班后的解决方案,以及 4 票@stackoverflow:

PHP:

...
function closetags($content) {
   preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $content, $result);
    $openedtags = $result[1];
  preg_match_all('#</([a-z]+)>#iU', $content, $result);
 $closedtags = $result[1];
  $len_opened = count($openedtags);
  if (count($closedtags) == $len_opened) {
       return $content;
  }
  $openedtags = array_reverse($openedtags);
  for ($i=0; $i < $len_opened; $i++) {
        if (!in_array($openedtags[$i], $closedtags)) {
         $content .= '</'.$openedtags[$i].'>';
       } else {
           unset($closedtags[array_search($openedtags[$i], $closedtags)]);
        }
  }
  return $content;
}
...

the TPL:

{$pages[j].text|truncate:300|@closetags}

拉出所有打开的标签,将它们一一推入数组(array_1)中。

拉出所有闭合标签,将它们逐一推入数组 (array_2)(这包括自闭合标签)。

对于第一个数组 (array_1) 中在第二个数组 (array_2) 中找不到的标签,将它们添加到 html 中。

[edit]

当然,如果你没有编写正确的 html,这个方法就会惨遭失败……但是那又怎样呢?

另一种方法是在字符串中向前查看哪些标签已关闭,并根据需要关闭它们。

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

使用 SMARTY 截断 HTML 格式的文本 的相关文章

  • 防止浮动换行,直到元素达到最小宽度

    我有可变宽度的 HTML 布局 内容左侧有一个固定宽度的菜单 div 可变宽度 由 css max width 和 min width 设置 对于非常窄的浏览器窗口 我希望内容包裹在菜单下方 我目前通过设置来实现这一点float left在
  • Jquery 中的动态滚动位置

    请帮助我解决以下情况 我有 3 个页面 当滚动到达第二页时 用户滚动页面 它必须找到特定的 ID 然后触发一个函数 一旦第三页开始 另一个函数就会触发 根据要求我不应该使用任何插件
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 如何延迟加载嵌入在 iframe 上的 YouTube 视频?

    如何将延迟加载应用于iframe嵌入视频 我尝试添加loading eager loading auto and loading lazyload 您可以使用srcdoc你里面的属性iframe标签来加载图像 请参阅以下示例作为参考
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas
  • 博客上的随机背景图片

    我正在尝试整理某种代码 以随机化我的博主博客上的背景图像 我的编程技能不足 但我愿意尝试建议 我记得在 WordPress 中实现了类似的功能 通过将 php 代码文件存储在图像文件夹中 然后从 CSS 中调用该 php 文件 就像它是图像
  • dom 元素转换后 IE 显示水平滚动条

    我在网站的各个地方使用了以下 css http jsfiddle net uycq29mt 1 http jsfiddle net uycq29mt 1 a position absolute background red width 60
  • 无法更改 SVG 元素的类名

    我想通过单击按钮来更改应用于 SVG 的类 代码是here http jsfiddle net p19rnmev 我的 SVG 看起来像
  • 如何使按钮在表格单元格内居中

    我试图通过以下方式将按钮置于表格内的中心 text align center 然而 它似乎对我不起作用 注 我用过Display table cell结合Vertical align middle将按钮的文本居中 正如您所看到的 第一个按钮
  • 如何将包含大量表格的 HTML 文档转换为 Word 文档?

    我创建了一个包含许多表格的 HTML 文档 如何将文档转换为Word 问题是 如果我用 Word 打开 HTML 文档 由于某种原因我会得到非标准的双行表格 table border 1 color 000000 cellpadding 0
  • 上传图像 onclick 多个蒙版图像

    一旦用户单击蒙版图像 我们就允许用户上传自定义图像 如果有单个蒙版图像 则效果很好 https codepen io kidsdial pen jJBVON https codepen io kidsdial pen jJBVON 要求 但
  • 父级嵌入框阴影与子级 div 重叠

    我遇到一个问题 子级 div 与父级框阴影底部重叠 父级有一个 max height w overflow y 滚动 任何帮助都会很棒 https i stack imgur com jQe0r png https i stack imgu
  • 具有有限行数和字符数限制的文本区域

    我需要具有 TextArea 的功能 1 maximum total lines 6 and 2 in each line there must be maximum of 16 chars 3 if user enters 17th ch
  • 排除单个浏览器使用 CSS 类

    我想排除 Internet Explorer 使用特定的 CSS 类 这可能吗 Details 我有一个 css 类 看起来像 input type radio checked input type radio hover box shad
  • XPATH 查询、HtmlAgilityPack 和提取文本

    我一直在尝试从名为 tim new 的类中提取链接 我也得到了解决方案 给出了解决方案 片段和必要的信息here https stackoverflow com questions 2982862 extracting a table ro
  • 如何滚动到div内的元素?

    我有一个滚动的div我想在点击它时发生一个事件 它会强制执行此操作div滚动以查看内部元素 我写的JavasCript是这样的 document getElementById chr scrollIntoView true 但这会在滚动时滚
  • 一旦 webapp 添加到主屏幕,是否可以强制 iphone/ipod 更新 apple-touch-icon?

    我使用 safari 的所有推荐链接和元标记创建了一个网络应用程序 例如
  • 加载另一个 JS 脚本后加载

    这是我的代码 very big js file lots of html stuff 问题是 这些是异步加载的 有没有办法等待第二个脚本直到第一个脚本加载 如果您使用 jQuery 有一个非常简单的方法可以通过获取脚本 https api

随机推荐

  • 如何执行SQL查询而不显示结果

    是否可以执行 SQL 查询而不显示结果 like Select from Table Name 运行此查询后 结果不应显示在 sql server 中 我很惊讶没有人想出答案 打开 执行后丢弃查询结果 选项 我很确定这就是面试官想要的 SE
  • 如何为专有语言构建 AST?

    我试图了解如何为专有语言构建 AST 我需要构建一个 AST 以便我可以输入我的规则和指南来检查源代码中可能存在的错误 如何构建 AST 有没有任何书籍 文章可以帮助我入门 龙的编译器书有帮助吗 请注意 我没有 CS 背景 Thanks 这
  • C 中的作用域可以用括号括起来并返回一个值吗? [复制]

    这个问题在这里已经有答案了 我查了定义MIN在 Mac OS X 上 发现了这个 define MIN A B typeof A a A typeof B b B a lt b a b 一开始并不那么明显 但是当它扩展时 它就变成了对我来说
  • RestEasy:找不到类型为 java.util.ArrayList 媒体类型为 application/json 的响应对象的 MessageBodyWriter

    消息 无法找到类型为响应对象的 MessageBodyWriter 媒体类型的 java util ArrayList application json 描述 服务器遇到内部错误 找不到 MessageBodyWriter 用于类型为 ja
  • 阻止浏览器加载我的网页的未更新的缓存版本。

    Problem 我的主页上有 8 张图片 可以通过上传页面进行更改 更改 8 个图像后 用户导航回主页以查看新图像 但是 不会显示新图像 旧图像仍然存在 直到刷新浏览器 我猜测这是因为浏览器正在缓存页面然后重新加载缓存的页面 到目前为止我已
  • backbone.js 中的绑定和 _.bindAll

    我对绑定及其目的感到困惑 bind All在backbone js中 下面是创建模态视图的工作代码 modal并渲染从后端获取的评论 首先 在下面的代码中 我在initialize功能 bindAll this render renderC
  • `parse_rackup_file':rackup 文件 (config.ru) 不可读 (ArgumentError)

    我的 procfile 中有这个 web bundle exec unicorn p PORT c config unicorn rb 启动服务器后 我收到以下错误消息 foreman start 12 29 20 web 1 starte
  • 原始值的映射替代方案

    我对我的应用程序进行了一些分析 结果之一表明堆上大约 18 的内存被 类型的对象使用Double 事实证明这些对象是中的值Maps 我不能使用原始类型 我的推理是原始类型double比它的对象消耗更少的内存Double 有没有一种方法可以拥
  • 垃圾收集器是否跟踪所有 Python 对象?

    我正在尝试调试内存泄漏 请参阅问题Python Twisted 中的内存泄漏 它在哪里 https stackoverflow com questions 4078084 memory leak in python twisted wher
  • 处于咕噜模式的猪

    我在windows中安装了cygwin hadoop和pig 配置看起来不错 因为我可以在批处理和嵌入模式下运行 Pig 脚本 当我尝试以 grunt 模式运行 pig 时 发生了一些奇怪的事情 让我解释 我尝试运行一个简单的命令 例如 g
  • 如何使用 Microsoft Graph 或 Office 365 REST API 从 Outlook 获取所有任务?

    我正在构建一个 Web 应用程序 需要从使用 Outlook 任务的组织中获取所有任务 可以使用 Microsoft Graph 或 Office 365 REST API 来完成此操作吗 我在这两个服务的文档中都没有发现任何可以执行类似操
  • Google 文档查看器返回 204 响应,不再工作,有替代方案吗?

    更新时间 2016 年 11 月 16 日上午 9 53 美国东部时间 尽管 Google 声称已经 修复 了该问题 但许多人仍然看到 204 回复 当我自己测试文档加载 50 次时 其中 3 次 Google 返回了 204 响应 请访问
  • 重写使用 from...import 的模块方法

    我在重写方法时遇到问题from import语句被使用 一些例子来说明问题 a py module def print message msg print msg b py module from a import print messag
  • Stackoverflow 和函数指针

    我对此很迷茫 希望这里有人能提供帮助 我的应用程序由数百个评估数字代码的函数组成 每个函数的源代码在 5MB 范围内 并且我使用std map到函数指针 显然发生的情况是 当我尝试将参数传递给其中一个函数 通过指向它的指针访问 时 出现堆栈
  • Unity3d 5 WavePro 动态网格碰撞器

    我使用 Water4Advance 在 Unity3d 5 0 中模拟海浪 我在运行时使用 Gerstner Displace 使我的飞机发生位移 我看到网格如何变形 并向其中添加一个 MeshCollider 并且我喜欢在运行时刷新此对撞
  • 如何引用 DNX Core 5.0 (ASP.NET 5) 中的执行程序集?

    我正在从 NET 3 5 4 5 移植一些代码 在我的程序集中 我有一些从当前正在执行的程序集中读取资源的代码 然而 GetExecutingAssembly 不是一个方法Assembly输入 DNX core 5 0 var xsdStr
  • 最长的字母子串 - 从哪里开始

    我正在研究流行的麻省理工学院课程中的 最长字母子串 问题 我已经阅读了很多关于如何编码的信息 但我真的很难在概念上实现飞跃 前面的手指练习并不太难 我想知道是否有人知道任何材料可以真正打破这个问题中所采用的问题解决方法 我试着拿出笔和纸 但
  • 在 Eclipse 中粘贴多行 Java 字符串 [重复]

    这个问题在这里已经有答案了 不幸的是 Java 没有多行字符串文字的语法 如果 IDE 可以轻松使用类似的结构 那就没问题了 String x CREATE TABLE TEST n A INTEGER NOT NULL PRIMARY K
  • PHP/mysqli:使用 mysqli_stmt_bind_param() 插入 IP 地址

    我有一个数据库表 其中包含一个无符号整数字段来存储访问者的 IP 地址 user ip INT 10 UNSIGNED DEFAULT NULL 下面是尝试存储 IP 地址的 PHP 代码片段 ipaddr SERVER REMOTE AD
  • 使用 SMARTY 截断 HTML 格式的文本

    我有一个使用随机 HTML 代码格式化的变量 我称其为 text 我把它截断了 该值例如 div Lorem i ipsum b dolor span sit span amet b con i elit div 如果我截断文本的前 30