You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

php-latte v3中如何编写无需额外转义的JavaScript过滤器

自定义json_encode过滤器输出转义字符串问题

问题现象

  • 编写自定义json_encode模板过滤器,目标是直接输出原生JSON对象
  • 预期输出:
{"foo":"bar"}
  • 实际输出:
"{\"foo\":\"bar\"}"
  • 现有可行但冗余的写法:追加noescape过滤器可以拿到正确结果,但模板代码冗余,写法如下:
{$object|json_encode|noescape}
  • 当前过滤器代码:
public static function json_encode(FilterInfo $info, mixed $value): string {
    $info->contentType = ContentType::JavaScript;
    return json_encode($value);
}

解决方法

仅设置contentType不会关闭模板引擎默认的输出自动转义逻辑,需要在过滤器内直接标记当前输出跳过自动转义:

public static function json_encode(FilterInfo $info, mixed $value): string {
    // 关闭当前节点的自动转义
    $info->autoEscape = false;
    $info->contentType = ContentType::JavaScript;
    return json_encode($value, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
}

修改后模板直接使用{$object|json_encode}即可输出未转义的原生JSON,无需额外追加noescape过滤器。

提示:json_encode第二个参数传入的安全转义常量用于处理特殊字符,避免在HTML/JS上下文嵌入JSON时引发XSS漏洞。


内容的提问来源于stack exchange,提问作者Inc33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:18:23