模块 ngx_http_charset_module
| 示例配置 指令 charset charset_map charset_types override_charset source_charset |
ngx_http_charset_module 模块将指定的字符集添加到“Content-Type”响应头字段中。此外,该模块还可以在不同字符集之间进行数据转换,但存在一些限制:
- 转换仅单向执行 —— 从服务器到客户端,
- 仅支持单字节字符集之间的转换,
- 或单字节字符集与 UTF-8 之间的双向转换。
示例配置
include conf/koi-win; charset windows-1251; source_charset koi8-r;
指令
| 语法 |
charset |
|---|---|
| 默认值 |
charset off; |
| 作用域 |
http, server, location, if in location |
将指定的字符集添加到“Content-Type”响应头字段中。如果该字符集与 source_charset 指令中指定的字符集不同,则会执行转换。
参数 off 取消在“Content-Type”响应头字段中添加字符集。
字符集可以使用变量定义
charset $charset;
在这种情况下,变量的所有可能值都需要在配置中至少出现一次,形式可以是 charset_map、charset 或 source_charset 指令。对于 utf-8、windows-1251 和 koi8-r 字符集,只需将文件 conf/koi-win、conf/koi-utf 和 conf/win-utf 包含到配置中即可。对于其他字符集,创建一个虚拟的转换表即可,例如
charset_map iso-8859-5 _ { }
此外,字符集也可以在“X-Accel-Charset”响应头字段中设置。此功能可以使用 proxy_ignore_headers、fastcgi_ignore_headers、uwsgi_ignore_headers、scgi_ignore_headers 和 grpc_ignore_headers 指令禁用。
| 语法 |
charset_map |
|---|---|
| 默认值 | — |
| 作用域 |
http |
描述从一种字符集到另一种字符集的转换表。反向转换表使用相同的数据构建。字符代码以十六进制给出。80-FF 范围内缺失的字符将被替换为“?”。从 UTF-8 转换时,单字节字符集中缺失的字符将被替换为“&#XXXX;”。
示例
charset_map koi8-r windows-1251 {
C0 FE ; # small yu
C1 E0 ; # small a
C2 E1 ; # small b
C3 F6 ; # small ts
...
}
在描述到 UTF-8 的转换表时,UTF-8 字符集的代码应在第二列中给出,例如
charset_map koi8-r utf-8 {
C0 D18E ; # small yu
C1 D0B0 ; # small a
C2 D0B1 ; # small b
C3 D186 ; # small ts
...
}
发行版文件 conf/koi-win、conf/koi-utf 和 conf/win-utf 中提供了从 koi8-r 到 windows-1251,以及从 koi8-r 和 windows-1251 到 utf-8 的完整转换表。
| 语法 |
charset_types |
|---|---|
| 默认值 |
charset_types text/html text/xml text/plain text/vnd.wap.wml application/javascript application/rss+xml; |
| 作用域 |
http, server, location |
此指令出现在 0.7.9 版本中。
除了“text/html”之外,还可以在具有指定 MIME 类型的响应中启用模块处理。特殊值“*”匹配任何 MIME 类型(0.8.29)。
在 1.5.4 版本之前,默认使用“application/x-javascript”作为 MIME 类型,而不是“application/javascript”。
| 语法 |
override_charset |
|---|---|
| 默认值 |
override_charset off; |
| 作用域 |
http, server, location, if in location |
确定当从代理服务器或 FastCGI/uwsgi/SCGI/gRPC 服务器接收到的响应已在“Content-Type”响应头字段中包含字符集时,是否应进行转换。如果启用了转换,则接收到的响应中指定的字符集将用作源字符集。
需要注意的是,如果响应是在子请求中接收的,则无论 override_charset 指令的设置如何,始终执行从响应字符集到主请求字符集的转换。
| 语法 |
source_charset |
|---|---|
| 默认值 | — |
| 作用域 |
http, server, location, if in location |
定义响应的源字符集。如果此字符集与 charset 指令中指定的字符集不同,则会执行转换。