websvn的中文乱码问题的解决

来源:互联网 发布:eureka 集群 nginx 编辑:程序博客网 时间:2024/06/06 08:23
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
原创粉丝点击