7
回答
nginx同时支持gbk utf-8
百度AI开发者大赛带你边学边开发,赢100万奖金,加群:418589053   

nginx同时支持gbk utf-8,需要满足

1.可以通过浏览器访问。(默认utf-8)

2.可以通过cmd wget下载。(默认gbk)

举报
何须誓言
发帖于4年前 7回/2K+阅
共有7个答案 最后回答: 4年前
大概只能检查UserAgent了
--- 共有 4 条评论 ---
何须誓言回复 @抱雪 : 哦 这样能解决wget问题,客户访问的时候 不止wget 4年前 回复
抱雪回复 @何须誓言 : 如果你本来就有两个版本的程序的话,在里面做一个URL重写就可以了,如果你希望Nginx给你转码,那我不知道 4年前 回复
抱雪回复 @何须誓言 : 我猜想你是发送不同编码的文件名吧,因为内容编码问题不大. 如果检查到UserAgent是 Wget/x.xx 之类的,就发送一个GBK编码后的文件名,这是在编程语言的实现,Nginx本身怎么实现我也不知道 $http_user_agent ~ ^Wget { #这里不知道Nginx怎么弄 } 4年前 回复
何须誓言跟user agent 有什么关系 4年前 回复

这个需求是怎么回事?暂且不管nginx支持不支持两种编码。

文件的编码始终是固定的,即使wget下载是gbk,访问是utf8. 客户端请求到的文件编码是不可能变的。具体以何种编码显示,是客户端的问题。


--- 共有 1 条评论 ---
何须誓言服务端会以gbk/utf8/gb2312存放文件 三种格式存储文件名 客户端访问的时候 会以gbk/utf8/gb2312 访问文件名 比如,存放文件名可能是gbk的,访问的文件名是utf8的 4年前 回复
通过gbk来节约汉字的1个字节没有意义,除外文学作品,一般的传输中汉字占比都不大,带宽并不是核心因素之一,虽然编程语言在output的时候可以修改内容的编码,但这样做比较混乱、得不偿失
--- 共有 1 条评论 ---
何须誓言客户这么存,蛋疼 4年前 回复

重新描述下需求:

服务端会以gbk/utf8/gb2312存放文件 三种格式存储文件名

客户端访问的时候 会以gbk/utf8/gb2312 访问文件名

比如,存放文件名可能是gbk的,访问的文件名时用utf8的url访问

 

建议的处理方法:
比如,有文件redirect.php,所有请求必须经过此文件处理。
1. redirect.php判断浏览器User-agent
2. 如果是curl wget 之类的工具,User-agent直接会体现出来,此时redirect.php重定向请求到 file.gbk.php

3. 非下载工具访问(浏览器),此时redirect.php重定向请求到 file.utf8.php


这个判断nginx也可以做,但是有其它需求时,nginx不好扩展。

--- 共有 4 条评论 ---
淡定的wo回复 @何须誓言 : 你这个需求越来越乱,应该梳理一下。不好实现,或者实现起来困难,应该考虑思路有问题。本身浏览器和下载工具是很好判断的。 4年前 回复
何须誓言回复 @淡定的wo : 根据浏览器还是不好判断的,如果是浏览器,是应该跳转到哪个php? 不是浏览器的gbk/gb2312/utf8都可能,同样,是浏览器这三种编码也都可能 4年前 回复
淡定的wo回复 @何须誓言 : 只需要确定是不是浏览器正常访问。xshell之类的明显不是浏览器。 4年前 回复
何须誓言这个是一个思路,不过不能彻底解决。只针对了wget curl 这种必须在cmd里使用,wget curl 不是只在cmd里下载的,如果在xshell 等工具里 可能是utf-8/gbk等。 看来只能用apache代理下了 4年前 回复
顶部