新闻详情

新闻详情

首页 / 资讯中心 / 详情

Twig json_encode 过滤器实战:在模板中序列化数据并组合 JSON 编码选项

发布时间:2026/11/15 12:41:38来源:尧图网络
Twig json_encode 过滤器实战:在模板中序列化数据并组合 JSON 编码选项
后端【免费下载链接】TwigTwig, the flexible, fast, and secure template language for PHP项目地址https://gitcode.com/gh_mirrors/tw/Twig点击查看免费下载本篇指南基于 Twig 官方文档 json_encode 过滤器 展开讲清楚json_encode过滤器在模板中的作用、options位掩码参数的用法以及如何用constant()函数与位运算操作符组合JSON_*常量并结合 src/Extension/CoreExtension.php 与 tests/Fixtures/filters/json_encode.test 的源码证据说明其底层实现与自动转义环境下的正确使用方式。一、json_encode过滤器把模板值序列化为 JSONjson_encode是 Twig 核心过滤器之一作用是将任意值转换为 JSON 字符串表示{{ data|json_encode() }}官方文档明确指出Twig 内部直接调用 PHP 原生的json_encode函数实现该过滤器。这一点可以从核心扩展的过滤器注册表得到印证——在 src/Extension/CoreExtension.php 的 encoding 分组中该过滤器被直接映射为 PHP 的全局函数json_encode而不是一个包装方法// encoding new TwigFilter(url_encode, [self::class, urlencode]), new TwigFilter(json_encode, json_encode), new TwigFilter(convert_encoding, [self::class, convertEncoding]),这意味着它没有任何 Twig 侧的额外封装逻辑序列化语义可序列化类型、对象属性可见性、失败时的false返回值等完全由 PHP 的json_encode决定行为可预期且与 PHP 侧保持一致。二、options参数位掩码与常量组合json_encode过滤器接受一个可选的options参数即 PHPjson_encode的选项位掩码bitmask。由于模板中不能直接书写 PHP 常量Twig 提供constant()函数在 src/Extension/CoreExtension.php 中注册用法详见 constant 函数文档来引用常量值。单选项的写法{{ data|json_encode(constant(JSON_PRETTY_PRINT)) }}若需要同时启用多个选项按照位掩码规则可以用 Twig 的位运算操作符b-and、b-xor、b-or优先级表见 operators_precedence.rst进行组合。官方文档给出的示例是格式化输出 十六进制编码引号{{ data|json_encode(constant(JSON_PRETTY_PRINT) b-or constant(JSON_HEX_QUOT)) }}b-or即按位或等价于 PHP 中JSON_PRETTY_PRINT | JSON_HEX_QUOT的写法。由于options就是一个整数位掩码任何JSON_*常量如JSON_UNESCAPED_UNICODE、JSON_HEX_TAG、JSON_THROW_ON_ERROR等 PHP 提供的 json_encode 选项常量都可以通过constant(...)引用后再用b-or叠加。三、与自动转义的关系为什么示例里总跟着rawjson_encode过滤器没有声明安全策略safe policy因此在开启自动转义的环境中它产生的字符串仍会经过 HTML 转义——引号会变成quot;之类的内容JSON 结构就会被破坏。这正是官方集成测试 tests/Fixtures/filters/json_encode.test 中每个用例都写成|json_encode|raw的原因{{ foo|json_encode|raw }} {{ foo|json_encode|raw }} {{ [foo, foo]|json_encode|raw }}测试期望的输出为未加转义的合法 JSONfoo foo [foo,foo]因此实战中的推荐顺序是json_encode之后紧跟raw关于raw的语义参见 raw 过滤器文档。典型场景包括在模板中向前端 hydration 脚本内联数据scriptwindow.__DATA__ {{ data|json_encode(constant(JSON_HEX_TAG) b-or constant(JSON_HEX_APOS))|raw }};/script用 HEX 类选项避免/script截断与引号冲突输出纯 JSON 响应体模板作为 API 视图调试时查看复杂嵌套数组的完整结构配合JSON_PRETTY_PRINT。四、特殊值的序列化行为以Markup为例序列化结果不仅取决于值本身还取决于值的类型。以 Twig 的 Markup 类为例该类实现了\JsonSerializable其jsonSerialize()返回内部字符串内容。上面的测试用例中foo正是new \Twig\Markup(foo, UTF-8)实例最终被序列化为foo而非带类名的对象 JSON。这说明凡是实现了JsonSerializable的对象经json_encode过滤器输出时都遵循各自jsonSerialize()的约定。从源码结构看Twig 对json_encode本身没有做任何结果包装或错误处理序列化失败例如遇到非 UTF-8 字符串时的行为与直接调用 PHPjson_encode完全一致需要在使用侧自行控制。五、使用要点小结要点说明依据底层实现直接调用 PHP 原生json_encode无 Twig 封装CoreExtension.php#L252选项参数options为位掩码通过constant(JSON_XXX)引用 PHP 常量json_encode.rst多选项组合用b-or按位或拼接多个常量operators_precedence.rst自动转义环境输出前追加raw否则会破坏 JSON 中的引号等字符json_encode.test对象序列化遵循JsonSerializable等 PHP 原生语义Markup.php掌握以上内容后你就可以在任意 Twig 模板中安全地把数组、对象或标量输出为合法 JSON并自由组合 PHP 提供的编码选项来适配前端嵌入、API 响应或调试展示等场景。赞分享后端【免费下载链接】TwigTwig, the flexible, fast, and secure template language for PHP项目地址https://gitcode.com/gh_mirrors/tw/Twig点击查看免费下载相关推荐打造你的专属桌面伙伴DyberPet开源桌宠框架深度解析打造你的专属桌面伙伴DyberPet开源桌宠框架深度解析 在数字化生活日益丰富的今天桌宠软件作为桌面伴侣已经超越了简单的装饰功能成为了集交互、养成、任务管桌面应用AI 应用交互助手Twig inky_to_html 过滤器用 twig/inky-extra 将 Inky 邮件模板编译为兼容 HTMLTwig inky_to_html 过滤器用 twig/inky extra 将 Inky 邮件模板编译为兼容 HTML 本文围绕 Twig 官方文档中 in后端Twig convert_encoding 过滤器基于 iconv 的模板层字符编码转换详解Twig convert_encoding 过滤器基于 iconv 的模板层字符编码转换详解 在涉及多语言数据源如日文、俄文、中文内容混排的 PHP 项目后端上一篇agents 仓库>下一篇GitHub Linguist集成测试指南确保模块协同工作创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

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

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

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

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

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】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/14 17:14: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/14 16:35:50

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/15 4:06:36

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

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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