Glype Proxy 在 nginx 下 GBK 网页乱码问题

Glype 是一个 php 的 web 在线代理程序。最近发现在 nginx + php-fcgi 环境下用 Glype 打开部分 GBK 编码的网站会出现乱码。

这个问题原因是 nginx 中设置了默认字符编码:

charset utf-8;

如果 php 传递给 nginx 的 http header 中的 Content-Type 没有 "charset", 则 nginx 会把设置的默认编码附加上去:

php 发送的原始 header: Content-Type: text/html
nginx 实际发送的 header: Content-Type: text/html; charset=UTF-8

Glype 会原封不动将目标网页的原始 Content-Type header 发送给浏览器。而某些网站(比如百度)的 http header 的 Content-Type 并不包含 charset,如果这些网页内容是非 UTF-8 编码, 在浏览器下就会出现乱码。

workaround (保留 nginx设置不变)

修改 Glype 的 browser.php 文件,在 Request 类的 processHeaders 方法最后加上下面代码:

if( !$charset )
header("Content-Type: " . $mime . '; charset=');

如果网页的 Content-Type 没有 charset,强制设置一个空的 charset 值。




comments powered by Disqus