ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

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

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),仅供参考
返回列表