set_quote_json_str
指令 `set_quote_json_str` 用于对字符串中的特殊字符进行转义,以便安全地表示为 JSON。
NGINX Set-Misc module
·
httpserverlocationif in serverif in location
语法set_quote_json_str variable_name [result_variable];
默认值none
上下文http, server, location, if in server, if in location
参数1-2
说明
set_quote_json_str 指令是 NGINX set_misc 模块的一部分,允许开发人员处理字符串变量,确保它们为 JSON 输出安全编码。该指令接受一个变量,并在原地修改它或将结果存储到另一个变量中,转义可能破坏 JSON 格式的字符,例如引号、反斜杠和控制字符。该指令可以接受一个或两个参数;第一个参数指定要转义的字符串,如果提供第二个参数,则指定用于存放转义后输出的独立变量。
在使用 set_quote_json_str 时,原始变量中可能导致 JSON 出现问题的特殊字符(如双引号或换行)会被转换为相应的转义序列。例如,字符串中的双引号会被替换为 \",换行字符会被替换为 \\n。这可确保生成的字符串是有效的 JSON,并能在 JSON 响应中安全输出而不会破坏格式。该指令在动态构建 NGINX 配置中的 JSON 字符串时尤其相关,特别是在包含用户提供的数据时。
需要注意的是,该指令可以在多个上下文中使用,包括 http、server、location,以及 if 条件中,使其在不同 NGINX 服务器配置中具有灵活性。还必须认识到,不当使用或配置可能导致 JSON 格式不正确或应用行为异常,因此应在了解输入字符串内容的前提下使用。
配置示例
location /json {
set $foo 'hello
"world"';
set_quote_json_str $foo;
# Now $foo holds: "hello\n\n\"world\""
}⚠
确保输入字符串尚未包含有效的转义序列,以避免双重转义。
⚠
在 if 指令中使用时要小心,因为过度嵌套可能导致意外行为。
⚠
请记住,使用此指令会修改原始变量,除非为输出指定了第二个变量。