Twig 的 trim 过滤器:全面掌握字符串两侧空白与字符裁剪
后端【免费下载链接】TwigTwig, the flexible, fast, and secure template language for PHP项目地址https://gitcode.com/gh_mirrors/tw/Twig点击查看免费下载导读trim是 Twig 模板语言中处理字符串两侧空白或其他指定字符的核心过滤器本文以 trim.rst 为骨架结合仓库中 CoreExtension.php 的源码实现与 trim.test 集成测试完整讲解其语法、参数、命名参数用法、底层 PHP 映射与边界行为。读完本文你将能在模板中准确裁剪任意字符串的前后空白或自定义字符并理解其在自动转义场景下的安全语义。trim 过滤器基本用法trim过滤器用于移除字符串开头和结尾的空白字符或用户指定的其他字符{{ I like Twig. |trim }} {# outputs I like Twig. #}默认情况下它剥离的是 PHP 标准定义的空白字符集合包括空格、制表符\t、换行符\n、回车符\r、空字节\0与垂直制表符\x0B。这一集合在源码中以常量形式定义// src/Extension/CoreExtension.php private const DEFAULT_TRIM_CHARS \t\n\r\0\x0B;也就是说模板中常见的首尾空格、换行、缩进都会在默认调用下被一并清理这在处理用户输入、从配置文件或数据库读取的多行文本时非常实用。自定义裁剪字符与裁剪方向除了默认的空白字符trim还支持两个参数参数说明默认值character_mask要剥离的字符集合字符掩码null即默认空白字符集合side裁剪方向both左右都裁、left仅左侧、right仅右侧both按字符掩码裁剪{{ I like Twig.|trim(.) }} {# outputs I like Twig #}这里传入.作为字符掩码表示将字符串末尾的句号剥掉而开头的空格因不在掩码内而被保留。仅裁剪左侧{{ I like Twig. |trim(side: left) }} {# outputs I like Twig. #}使用命名参数side: left只清除字符串左侧的空白右侧内容原样保留。位置参数组合{{ I like Twig. |trim( , right) }} {# outputs I like Twig. #}也可以按位置传参第一个参数为字符掩码空格第二个参数为方向right结果仅剥离右侧的空格。命名参数与位置参数可以混用集成测试中即有trim(character_mask: x, side: left)与trim(side: right, character_mask: x)两种等价写法参见 trim.test。源码实现从过滤器到 PHP 原生函数官方文档明确指出内部实现上Twig 直接使用 PHP 的trim、ltrim与rtrim函数。这一事实可以在源码中得到印证。过滤器的注册位于 CoreExtension.phpnew TwigFilter(trim, [self::class, trim]),也就是说模板中的|trim最终会调用CoreExtension::trim()静态方法。该方法的完整实现如下src/Extension/CoreExtension.php#L1208-L1223public static function trim($string, $characterMask null, $side both): string|\Stringable { if (null $characterMask) { $characterMask self::DEFAULT_TRIM_CHARS; } $trimmed match ($side) { both trim($string ?? , $characterMask), left ltrim($string ?? , $characterMask), right rtrim($string ?? , $characterMask), default throw new RuntimeError(Trimming side must be left, right or both.), }; // trimming a safe string with the default character mask always returns a safe string (independently of the context) return $string instanceof Markup self::DEFAULT_TRIM_CHARS $characterMask ? new Markup($trimmed, $string-getCharset()) : $trimmed; }从这段实现可以提炼出三个关键行为方向映射side参数通过match表达式映射到三个 PHP 原生函数——both→trim()left→ltrim()right→rtrim()。非法方向报错若传入both/left/right之外的取值会抛出RuntimeError错误信息为Trimming side must be left, right or both.提醒开发者参数取值必须严格限定在这三者之一。空值安全$string ?? 表明传入null会被当作空字符串处理不会引发类型错误。此外底层还保留了一层函数包装 src/Resources/core.phpfunction twig_trim_filter($string, $characterMask null, $side both) { return CoreExtension::trim($string, $characterMask, $side); }这是旧版 Twig 遗留的函数式入口方便通过twig_trim_filter()以传统方式调用同一套逻辑。安全字符串Markup的特殊语义实现中有一处容易被忽略的细节当被裁剪的字符串是Markup对象即被标记为安全的 HTML 内容如|raw或{% autoescape %}产生的安全字符串且使用默认字符掩码时裁剪结果会被重新包装为同字符集的Markup对象保持其“安全”标记不丢失而一旦使用了自定义字符掩码结果则降级为普通字符串。这意味着{{ someSafeMarkup|trim }}的结果仍是安全的Markup可以继续在 HTML 上下文中安全输出{{ someSafeMarkup|trim(.) }}的结果是普通字符串后续输出将按当前转义策略重新转义。这个设计保证了默认裁剪不会意外破坏已有的转义安全性而自定义裁剪则把控制权交还给开发者。边界情况与集成测试验证仓库中的集成测试 tests/Fixtures/filters/trim.test 系统性地覆盖了该过滤器的各种边界场景可作为实战行为的权威参考默认空白裁剪 I like Twig. |trim输出I like Twig.自定义掩码 foo/|trim(/)输出foo开头的空格因不在掩码内而保留命名参数组合xxxI like Twig.xxx|trim(character_mask: x, side: left)输出I like Twig.xxxtrim(side: right, character_mask: x)输出xxxI like Twig.空字符串与 null|trim、|trim(, left)、null|trim等均安全输出空字符串不会抛错含 HTML 的文本对带有{{ myhtml | trim }}的多行 HTML 片段裁剪仅去除首尾空白中间的br标签原样保留同时测试也验证了裁剪后的内容会按模板上下文进行转义如strong变为lt;stronggt;。这些用例直接印证了文档中的示例行为也为你在自己的项目中编写回归测试提供了模板。使用建议清理表单输入{{ value|trim }}是去除用户输入首尾空格最直接的方式常与default过滤器组合使用以防空值。去除定界符处理文件扩展名、路径或引号包裹的内容时用|trim(.)、|trim(/)等掩码按需剥离特定字符。方向控制当只需要去除左侧前导空白如缩进或右侧尾部换行时使用side: left/side: right避免误删另一侧的预期内容。方向值合法性side只接受both、left、right三个值其他取值会在渲染阶段抛出RuntimeError请勿传拼写错误的值。小结trim过滤器虽然语法简洁但其背后映射了 PHP 的trim/ltrim/rtrim三函数支持字符掩码与裁剪方向两个参数并针对Markup安全字符串做了特殊处理。理解 CoreExtension::trim() 的实现细节与 trim.test 中的边界用例可以帮助你在模板中安全、精准地完成各类字符串裁剪任务。赞分享后端【免费下载链接】TwigTwig, the flexible, fast, and secure template language for PHP项目地址https://gitcode.com/gh_mirrors/tw/Twig点击查看免费下载相关推荐es-toolkit 兼容版 trim 深度解析用 es-toolkit/compat 精准裁剪字符串两端空白与指定字符es toolkit 兼容版 trim 深度解析用 es toolkit/compat 精准裁剪字符串两端空白与指定字符 es toolkit 的 compa前端后端LunaTranslator 如何在 Windows 10 上启用 Windows 语音识别LunaTranslator 如何在 Windows 10 上启用 Windows 语音识别 本文解决一个具体任务在 Windows 10 系统上让 Lu后端Dagger TypeScript SDK FileContentsOpts 详解用 offsetLines 与 limitLines 精准切片读取 File 内容Dagger TypeScript SDK FileContentsOpts 详解用 offsetLines 与 limitLines 精准切片读取 File后端上一篇qrcp 开发与发布完全指南SemVer 版本管理、GitHub Actions CI 与 GoReleaser 打包流水线解析下一篇霞鹜文楷三分钟掌握免费开源中文字体的终极解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

PTA数据结构题集本地刷题环境搭建指南

PTA数据结构题集本地刷题环境搭建指南

简介:本资源是面向高校计算机专业学生及算法初学者的PTA数据结构与算法题目集配套代码实现合集,覆盖浙江大学《数据结构》MOOC课程及PTA平台经典题型,助力读者系统训练链表、树、图、排序、查找等核心算法能力。压缩包共41个文件,…

2026/9/26 8:15:15 阅读更多 →
jc 解析器实战:将 `update-alternatives --get-selections` 输出转换为 JSON 的 `update-alt-gs` 指南

jc 解析器实战:将 `update-alternatives --get-selections` 输出转换为 JSON 的 `update-alt-gs` 指南

开发工具 【免费下载链接】jc CLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts.…

2026/9/26 8:15:15 阅读更多 →
MyDAC源码包深度解析:Delphi直连MySQL协议与认证修复

MyDAC源码包深度解析:Delphi直连MySQL协议与认证修复

简介:这是一份 MyDAC(MySQL Data Access Components)5.00.1.7 的完整源代码压缩包,解决 Delphi、Delphi for .NET、CBuilder 与 Kylix 开发者直连 MySQL 服务器、绕过复杂中间层的数据库访问问题。相较于标准 MySQL 连接方案&…

2026/9/26 8:15:15 阅读更多 →

最新新闻

数智码力:普通人学Python,不必追求独立开发项目,会“改造脚本”就够用

数智码力:普通人学Python,不必追求独立开发项目,会“改造脚本”就够用

很多新手自学Python,都被错误的学习标准误导:认为学Python的终极目标,是从零独立开发完整项目,写出专属代码。达不到这个标准,就觉得自己没学好、学无用功。其实对于99%的普通人、职场人、学生而言,完全不需…

2026/9/26 8:50:36 阅读更多 →
llama.cpp KV缓存量化实战:降低71%显存的关键技术

llama.cpp KV缓存量化实战:降低71%显存的关键技术

1. 项目概述:为什么“KV量化”成了llama.cpp长上下文落地的生死线最近两周,我在给一个嵌入式边缘设备部署7B级别大模型时,连续踩了三次显存墙——不是GPU爆显存,而是Android端用llama.cpp跑4K上下文直接OOM。直到我把-kv参数从默认…

2026/9/26 8:50:36 阅读更多 →
WorkBuddy Enterprise企业级Agent平台:从超级个体到超级团队的落地实践

WorkBuddy Enterprise企业级Agent平台:从超级个体到超级团队的落地实践

1. 从「超级个体」到「超级团队」:这个平台到底在解决什么问题 第一次看到「WorkBuddy Enterprise」这个名字,我脑子里蹦出来的第一个念头是:腾讯云终于把 CodeBuddy 那套东西往企业级方向推了。如果你最近半年一直在关注 AI Agent 这个赛道&…

2026/9/26 8:50:36 阅读更多 →
达芬奇稳定工作流配置指南:硬件适配、GPU加速与许可证管理

达芬奇稳定工作流配置指南:硬件适配、GPU加速与许可证管理

1. 这不是“破解教程”,而是一套可长期稳定使用的达芬奇专业工作流配置方案 达芬奇(DaVinci Resolve)——这个名字在影视后期圈里,几乎等同于“调色天花板”和“剪辑全能王”。但凡做过3分钟以上成片的人,都绕不开它&…

2026/9/26 8:50:35 阅读更多 →
燃料电池复合能源系统三十六计:从架构选型到运维实战

燃料电池复合能源系统三十六计:从架构选型到运维实战

干过几年燃料电池复合能源系统的人都有个共同感受:整个系统里最让人头疼的不是电堆本身,而是电堆周围那一圈“配角”——锂电池充放电策略对不对、DC/DC选型留了多少裕量、冬天冷却液能不能拉起来、故障码出现之后保护动作顺序合不合理。所谓复合能源&am…

2026/9/26 8:50:35 阅读更多 →
MySQL 5.7.22 生产部署指南:兼容性、安全初始化与 systemd 管理

MySQL 5.7.22 生产部署指南:兼容性、安全初始化与 systemd 管理

简介:本资源为MySQL 5.7.22官方Windows 32位安装包(mysql-5.7.22-win32),面向数据库初学者、运维人员及中小型项目开发者,用于快速部署稳定可靠的开源关系型数据库环境。压缩包共365个文件,含83个动态链接库…

2026/9/26 8:49:35 阅读更多 →

日新闻

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、…

2026/9/26 0:00:25 阅读更多 →
学校官网模拟全流程实践:从页面布局到后端接口与部署

学校官网模拟全流程实践:从页面布局到后端接口与部署

如果你正在找一门 Web 大作业的题目,或者刚开始接触 Web 前端开发想做点能拿来展示的东西,“学校官网模拟”几乎是最稳的选择。题目看着简单,但要把导航、新闻列表、轮播 Banner、二级页面、后台数据都串起来,其实已经把前端布局、…

2026/9/26 0:00:25 阅读更多 →
超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

超级玛丽游戏源码C++:从零搭建横版跳跃游戏工程

简介:这是一份面向游戏开发初学者与C进阶学习者的超级玛丽(超级马里奥)游戏源码,基于C面向对象编程实现,适合想通过经典项目理解游戏主循环、角色类设计、地图关卡加载与物理碰撞检测的读者参考。压缩包共49个文件&…

2026/9/26 0:00:25 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/25 19:27:14 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/25 11:15:26 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/25 20:29:09 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/25 20:29:43 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/25 19:27:26 阅读更多 →