红联Linux门户
Linux帮助
当前位置: 红联Linux门户 > Debian

websvn的中文乱码问题的解决

发布时间:2008-01-12 00:21:50来源:红联作者:wynlchae
websvn是subversion的一个php编写的web界面,但使用中发现该程序对svn中的中文目录、注释显示不正常,原有的中文目录显示成了\?\230\?\153\?\88样子的乱码。

由于处于安全考虑,这个系统中对php做了open_dir的限制,所以没有使用apt来安装websvn,而是从websvn.tigris.org下载了1.6.1的版本,最新的2.0的版本和系统默认的svn1.4.2不兼容没法使用。

经过跟踪调试,发现websvn是通过php的popen函数来调用svn命令并读取返回值,但是这个返回的内容本身就是乱码的。再进一步测试,发现popen函数的环境变量中LANG设置为C,这样执行的svn命令,中文信息就变成了\?\230\?\153\类的乱码了。

知道了问题所在,修改起来就很容易了:

先修改下config.inc文件中的编码设置

引用:
$config->setInputEncoding("utf-8");
$config->setOutputEncoding("utf-8");


在修改下command.inc中的函数

引用:
function quoteCommand($cmd, $redirecterr)
{
global $config;

if ($redirecterr)
$cmd .= " 2>&1";

// On Windows machines, the whole line needs quotes round it so that it's
// passed to cmd.exe correctly

if ($config->serverIsWindows)
$cmd = "\"$cmd\"";

return "export LANG=zh_CN.UTF-8 && " . $cmd;
}


经过这样简单修改,并清除了cache中的缓存,在刷新显示,嗯,一切正常了。

调试环境是debian4.0 subversion 1.4.2 websvn1.6.1 apache2.2.3 php5.2
文章评论

共有 0 条评论