Rumah  >  Artikel  >  pembangunan bahagian belakang  >  PHP 中文乱码,Winodws与Linux下不同处理疑问?

PHP 中文乱码,Winodws与Linux下不同处理疑问?

WBOY
WBOYasal
2016-06-23 13:32:44885semak imbas

我用 wamp 自己搭建了一个本地站点学习 PHP ,系统是 Windows8 , WEB 网页是:
编码,
然而在处理中文目录与文件名时出现乱码,在网上搜索一下说是要用
$dir=iconv('UTF-8','GB2312',$dir); 解码目录为中文然后再操作,然后再用
$dir=iconv('GB2312','UTF-8',$dir); 反编码显示出来。
这方法也确实可行。
然而没想到的上我上传页面到购买的 WEB HOSTING 服务器上时,会出现乱码,
而不用解码与反解码操作时不会出现乱码,WEB HOSTING 是 LINUX 下的 CPANEL,
实在是想不通为什么为出现这种差别。
小弟初学PHP,有大侠为我解惑一下出现这种问题的原因吗?
或是根本是我本地机子上的站点没有配置好?


回复讨论(解决方案)

其实不建议使用中文目录路径。
把GB2312改为GBK试试。

操作系统字符集
Winodws GBK
Linux       UTF-8

当网页字符集与操作系统字符集相同时,文件名就不需转码

如果我开发一个PHP的通用模版,怎么办,还要判断 系统集?

是的,既然是通用的,那么就要针对不同的环境做出相应的应对
不能把问题留给用户

比如你的中文文件名问题,就不应该简单的 $dir=iconv('UTF-8','GB2312',$dir); 
而可以这样:
在配置文件中写到
define('APP_CHARSET', 'UTF-8');
define('OS_CHARSET', substr(PHP_OS, 0, 3) == 'WIN' ? 'GBK' : 'UTF-8');

这样 $dir=iconv('UTF-8','GB2312',$dir); 
写作 $dir=iconv('APP_CHARSET, OS_CHARSET, $dir);
就通用化了
还可进一步 
function lang(&$str) {
  return $str = iconv('APP_CHARSET, OS_CHARSET, $str);
}
程序中
lang($dir);
$path = lang($dir);
都可以

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:关于PHP运算符的一点疑惑Artikel seterusnya:php网站cpu一直非常高