jackywdx 发表于 2011-07-13 14:28

PHP调用SVN命令出现字符编码错误的问题

最近一个项目,我用PHP调用svn,做一些comit, add, updte等操作,
函数很简单,就是一个exec
比如提交一个文件:svn_api.php

$cmd = "/usr/bin/svn ci Tulips5.jpg -m 'add file' --config-dir /home/svnroot/.subversion 2>&1";
$re = exec($cmd, $out_put, $ret);
var_dump($out_put);
但是如果有包含中文字符的文件的时候,而且是通过crontab启动的时候,就会有下面的报错出现:
array(3) {
=>
string(60) "svn: Error converting entry in directory '302/2849' to UTF-8"
=>
string(58) "svn: Can't convert string from native encoding to 'UTF-8':"
=>
string(72) "svn: 302/2849/?\232?\143?\138?\232?\138?\1773.jpg"
}

但是如果在SecureCRT终端直接执行
/opt/lampp/bin/php svn_api.php
这样执行就没有问题。


没有思路,不知道该怎么去解决,网上查的,大部分都是说字符编码的问题,设置一下LC_ALL, LC_LANG之类就可以解决,但是像如果靠crond服务启动的,无终端的情况,就不知道要怎么设置这个字符编码,试过调用PHP的setlocale(LC_ALL, "en_US.utf-8");还有直接$r = exec('export LC_ALL="en_US.UTF-8"', $out, $ret); 貌似都还是不行。
有知道的大虾请告诉一下。

dzb3688 发表于 2014-05-28 16:56

可以这样

error_reporting(E_ALL);
$handle = popen(' LANG=en_US.UTF-8 svn update--username dev-lin --password teste123--config-dir /home/wwwroot/.subversion/home/wwwroot/yiiu/ 2>&1','r');
echo "'$handle'; " . gettype($handle) . "\n";
$read = fread($handle, 2096);
echo $read;
pclose($handle);

bs 发表于 2014-06-09 12:26

convmv 转换 中文文件名
页: [1]
查看完整版本: PHP调用SVN命令出现字符编码错误的问题