新闻详情

新闻详情

首页 / 资讯中心 / 详情

Twig 的 trim 过滤器:全面掌握字符串两侧空白与字符裁剪

发布时间:2026/11/12 13:05:59来源:尧图网络
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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/11 13:52:51

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/10 19:42:40

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/12 9:50:02

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/12 9:25:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/11 15:37:39

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/10 17:14:10

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉