basename函数用来获取路径中文件名部分,
可是在redhat4.3或者某些其他系统下,无法正确获得带有中文的路径中的文件名,
下面这个函数来自网上,很好很强大,可以代替basename使用:
function sbasename($filename) {
return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
如果linux系统不能正确显示中文目录和文件名,可以在/etc/profile的最后加入:
export LANG="zh_CN.GBK"
至于为什么没用UTF-8,因为中文windows系统的文件名似乎是gbk的,
用utf-8编码的文件名在windows系统下会显示为乱码。所以要用gbk的编码去写文件、目录名。
linux下也设置成gbk,就和windows服务器上的处理一致了。
本身php程序和数据库都是用了utf8的字符集,所以在处理文件名的时候需要来回转码,顺便贴一个比较安全的转码函数:
function siconv($str, $out_charset, $in_charset) {
if (strtoupper($out_charset) != strtoupper($in_charset)) {
if (function_exists('iconv') && (@$outstr = iconv("$in_charset//IGNORE", "$out_charset//IGNORE", $str))) {
return $outstr;
} elseif (function_exists('mb_convert_encoding') && (@$outstr = mb_convert_encoding($str, $out_charset, $in_charset))) {
return $outstr;
}
}
return $str;
}
可是在redhat4.3或者某些其他系统下,无法正确获得带有中文的路径中的文件名,
下面这个函数来自网上,很好很强大,可以代替basename使用:
function sbasename($filename) {
return preg_replace('/^.+[\\\\\\/]/', '', $filename);
}
如果linux系统不能正确显示中文目录和文件名,可以在/etc/profile的最后加入:
export LANG="zh_CN.GBK"
至于为什么没用UTF-8,因为中文windows系统的文件名似乎是gbk的,
用utf-8编码的文件名在windows系统下会显示为乱码。所以要用gbk的编码去写文件、目录名。
linux下也设置成gbk,就和windows服务器上的处理一致了。
本身php程序和数据库都是用了utf8的字符集,所以在处理文件名的时候需要来回转码,顺便贴一个比较安全的转码函数:
function siconv($str, $out_charset, $in_charset) {
if (strtoupper($out_charset) != strtoupper($in_charset)) {
if (function_exists('iconv') && (@$outstr = iconv("$in_charset//IGNORE", "$out_charset//IGNORE", $str))) {
return $outstr;
} elseif (function_exists('mb_convert_encoding') && (@$outstr = mb_convert_encoding($str, $out_charset, $in_charset))) {
return $outstr;
}
}
return $str;
}