Windows下利用Gvim写PHP产生中文乱码问题解决方法

2015-01-24信息快讯网

昨天本来说早点睡觉呢,没想到一个在写PHP程序的时候发现出现的乱码问题又睡晚了,不过总算解决了。

首先:找出乱码产生的原因。 一直以为是浏览器的原因,结果我在chrome,firefox,IE9里面都出现了乱码,所以浏览器的因素可以排除。为了验证我猜测是Gvim的原因,
我用记事本(note)简单写了一个php文件
 
<?php 
echo "你好"; 
echo "世界"; 
?> 

结果没有出现乱码,所以问题就出在Gvim上,这个结论水到渠成。
于是,开始研究Gvim的配置文件(_vimrc), 现在给大家看一下我产生乱码之前的配置(注:我之前修改过):
 
set nocompatible 
source $VIMRUNTIME/vimrc_example.vim 
source $VIMRUNTIME/mswin.vim 
behave mswin 
set diffexpr=MyDiff() 
function MyDiff() 
let opt = '-a --binary ' 
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif 
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif 
let arg1 = v:fname_in 
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif 
let arg2 = v:fname_new 
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif 
let arg3 = v:fname_out 
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif 
let eq = '' 
if $VIMRUNTIME =~ ' ' 
if &sh =~ '\<cmd' 
let cmd = '""' . $VIMRUNTIME . '\diff"' 
let eq = '"' 
else 
let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"' 
endif 
else 
let cmd = $VIMRUNTIME . '\diff' 
endif 
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq 
endfunction 
"设置默认背景色 
colors desert 
"设置不自动备份 
set nobackup 
"设置默认字体和大小 
set guifont=Courier_New:h12:cANSI 
set termencoding=gbk 
set encoding=utf-8 
"产生问题的原因 
set fileencoding=chinese 
set fileencodings=ucs-bom,utf-8,chinese 
set langmenu=zh_CN.utf-8 
source $VIMRUNTIME/delmenu.vim 
source $VIMRUNTIME/menu.vim 
language messages zh_cn.utf-8 
language messages zh_cn.utf-8 
syntax enable 
syntax on 

这里需要说明一下:配置文件里enconding,fileeconding,fileecondings的含义:
encoding: GVim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。
用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在 .vimrc 中改变它的值才有意义。
fileencoding: GVim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
fileencodings: GVim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。
因此最好将 Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
其中:chinese 就是 cp963编码
只到这里我突然想起来,我的浏览里默认的字符集是 GBK的,而_vimrc里的设置编码是utf-8的,二者不对应,
 
colors desert 
set nobackup 
set guifont=Courier_New:h12:cANSI 
"处理文本中显示乱码 
set encoding=utf-8 
set fileencodings=chinese 
set fileencoding=chinese 
"处理菜单及右键菜单乱码 
source $VIMRUNTIME/delmenu.vim 
source $VIMRUNTIME/menu.vim 
"处理consle输出乱码 
language messages zh_CN.utf-8 
syntax enable 
syntax on 

修改完成之后,重新启动Gvim,中文乱码问题解决了。
VIM中设置php自动缩进为4个空格的方法详解
Linux下实现PHP多进程的方法分享
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
php读取文件内容至字符串中,同时去除换行、空行、行首行尾空格(Zjmainstay原创)
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
PHP imagecreatefrombmp 从BMP文件或URL新建一图像
Zend Framework中的简单工厂模式 图文
工厂模式在Zend Framework中应用介绍
php.ini-dist 和 php.ini-recommended 的区别介绍(方便开发与安全的朋友)
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
PHP中使用mktime获取时间戳的一个黑色幽默分析
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
simplehtmldom Doc api帮助文档
MySQL时间字段究竟使用INT还是DateTime的说明
PHP5中虚函数的实现方法分享
php中将地址生成迅雷快车旋风链接的代码[测试通过]
PHP session有效期session.gc_maxlifetime
SWFUpload与CI不能正确上传识别文件MIME类型解决方法分享
PHP中break及continue两个流程控制指令区别分析
zend api扩展的php对象的autoload工具
ThinkPHP采用模块和操作分析
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
适用于php-5.2 的 php.ini 中文版[金步国翻译]
The specified CGI application misbehaved by not returning a complete set of HTTP headers
Zend Studio (eclipse)使用速度优化方法
windows下开发并编译PHP扩展的方法
通过JavaScript或PHP检测Android设备的代码
zend framework多模块多布局配置
Php Image Resize图片大小调整的函数代码
php simplexmlElement操作xml的命名空间实现代码
PHP中simplexml_load_string函数使用说明
©2014-2024 dbsqp.com