Web3.0博士 发表于 2013-2-21 11:31:57

:国外Linux空间中文文件名网页可以用unicode码正确显示

本贴给出以下文章的补充,对空间用户没有系统权限的情况,

https://www.vpser.net/manage/lnmp-nginx-chinese-filename-directory.html


原创:国外Linux空间中文文件名网页可以用unicode码正确显示!

(花很多时间探索得到的经验 分享:)

Linux/Unix下如果能更改系统设置,中文文件名(或文件夹目录名)容易显示,否则不能直接显示,尤其在国外主机服务器上.

实际上主机将中文文件名网址改为unicode,要正确显示中文文件名网页,需要将中文文件名改为uncode编码.

中文文件名改为uncode编码可以用php函数iconv,例如以下php脚本:


<?php
echo '“于欣”的unicode码:[';
echo iconv('GBK', 'UTF-8', '于欣');
echo ']';
?>


以下两个中文名网页就是这样实现的:
yuxin.net/于欣
pubnic.com/于欣

我不喜欢看uncode码文件名,而且php程序读写也不用转换,所以我可能不用unicode码存储文件在另外文件夹目录,然后link过来:
ln -s ../data-dir/于欣 浜庢

cgi脚本 转换为unicode码的程序:我查到以下用法:
    use Encode qw/encode decode/;
    print encode("utf8", decode("gb2312", "于欣"));

下面是实际使用的例子,插入雷傲论坛程序dosavemodify.pl中,当用户名只含有 字母数字- 时存储目录取在网站根目录下,否则取在数据目录下 并且 符号link到网站根目录下unicode码目录:

$memberfiletitleu=$memberfiletitle;
$memberfiletitleu =~ tr/a-zA-Z0-9\-//d; # 用户名去掉 字母 数字 -
if($memberfiletitleu eq "") { # 如果去掉 字母 数字 - 后为空,则存储目录取在数据目录下
    $udir=$lbdir."../../".$host."/$memberfiletitle";
} else { # 否则取在数据目录data-dir下
    $udir=$lbdir."../../../date-dir/".$host."/$memberfiletitle";
    use Encode qw/encode decode/;
    $systlns="ln -s ".$udir." ".$lbdir."../../".$host."/";
    system($systlns.encode("utf8", decode("gb2312", $memberfiletitle))); # 符号link到网站根目录下unicode码目录
}

这些刚刚加在 pubnic.com , 欢迎测试,保证网址/二级域名 能稳定可靠使用:
www点beihang.com/用户名 用户名.beihang.com 用户名.yaotai.com www点yaotai.com/用户名
你申请的网址/二级域名能稳定持续永久使用(详细规则制定中...).本博士(yuxin.net)拟在国旗下宣誓为人联网事业保驾护航,“人联网”起点是你的网址OpenID,相关文章请搜索“人联网3.0”: baidu.com/s?wd=%22%C8%CB%C1%AA%CD%F83.0%22&cl=3
页: [1]
查看完整版本: :国外Linux空间中文文件名网页可以用unicode码正确显示