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

Rails API返回JSON时HTML标签被转义为Unicode如何解决

问题原因

Rails框架默认开启了JSON返回时的HTML实体转义逻辑,会自动把<、>、&、双引号等可能引发XSS风险的字符转换为Unicode转义序列,该逻辑和你是否调用to_s转换字符串无关。

解决方案

方案1:单接口局部生效(推荐)

不需要修改全局配置,仅在需要返回原字符的接口render时添加escape_html_entities: false参数即可:

# 原有业务逻辑保持不变
result.each do |row|
  i = row["i"].to_s
  j = row["j"].to_s
  obj[i][j] = {}
  obj[i][j]["name"] = row["name"].to_s
end

# 返回JSON时添加关闭转义的参数
render json: obj, escape_html_entities: false

方案2:全局关闭HTML实体转义

如果所有接口都需要返回原字符,可以在Rails初始化配置中关闭全局转义开关:

  1. 新建配置文件 config/initializers/json_escape.rb
  2. 写入以下内容:
ActiveSupport.escape_html_entities_in_json = false

注意:全局关闭后如果前端直接渲染接口返回的用户输入内容,可能存在XSS注入风险,需要前端自行做好转义处理。

方案3:Jbuilder模板场景

如果你使用Jbuilder构建JSON返回内容,使用raw!方法包裹需要原样输出的字段即可:

json.name raw! row["name"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:45:03