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

Rails控制器render json时如何仅单方法禁用&转义为\u0026

Rails单接口关闭JSON中&符号Unicode转义实现

问题背景

Rails框架默认在控制器通过render json:返回JSON数据时,会自动将&等HTML特殊字符转义为Unicode编码\u0026,示例代码如下:

def send_detail
  render json: { data: "name?surname&otherdetail" } 
end

访问接口地址localhost:3000/tests/send_detail时,默认返回结果为:

{ "data":"name?surname\u0026otherdetail" }

全局配置项ActiveSupport.escape_html_entities_in_json = false虽然可以关闭该转义逻辑,但会对整个应用的所有JSON返回生效,存在XSS安全隐患,无法满足仅单个接口保留&原样输出的需求。

实现方案

无需修改全局配置,仅在目标接口方法中单独指定序列化规则即可,两种可用写法:

  • 写法1:手动序列化JSON时指定关闭转义,直接返回JSON字符串
def send_detail
  response_data = { data: "name?surname&otherdetail" }
  # 仅当前to_json调用关闭HTML实体转义,不影响全局配置
  json_str = response_data.to_json(escape_html_entities: false)
  render plain: json_str, content_type: "application/json; charset=utf-8"
end
  • 写法2:Rails 5及以上版本支持直接在render时传入序列化参数
def send_detail
  render json: { data: "name?surname&otherdetail" },
         json_serializer_options: { escape_html_entities: false }
end

两种写法的作用范围都仅限当前接口请求,应用内其他接口仍然会保持默认的HTML特殊字符转义逻辑,不会引入额外安全风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 06:48:24