websvn的中文乱码问题的解决

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值