ngx_http_charset_module 模块
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”添加指定的字符集。 如果这个字符集和指令设置的字符集不同,就会进行转换。
参数off
表明不在响应头的“Content-Type”中添加字符集。
字符集可以当作变量来定义:
charset $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 指令来禁用。
语法: | 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
, and conf/win-utf
中已经提供了从koi8-r
到 windows-1251
,从koi8-r
到utf-8
,以及从 windows-1251
到utf-8
的完整转换表。
语法: | charset_types |
默认值: | charset_types text/html text/xml text/plain text/vnd.wap.wml application/x-javascript application/rss+xml; |
上下文: | http , server , location |
这个指令出现在版本 0.7.9.
使模块在响应时能处理除了“text/html
”之外其他指定的MIME类型。 特殊值“*
” 匹配任意的MIME类型(0.8.29)。
语法: | override_charset |
默认值: | override_charset off; |
上下文: | http , server , location , if in location |
对于接收到的代理服务器或者FastCGI服务器的响应头中“Content-Type”已经带有字符集的情况,确定是否进行字符集转换。 如果开启转换,接收到的响应中指定的字符集会被当作原始字符集。
需要注意的是,如果在子请求中接收到的应答,始终会将应答的字符集转换为主请求的字符集,无论override_charset
指令是否开启。
语法: | source_charset |
默认值: | — |
上下文: | http , server , location , if in location |
定义响应中的原始字符集。 如果这个字符集和指令设置字符集的不同,就会进行转换。
翻译: WenMing |