搜索

使用TP遍历Public文件夹下某个目录的所有文件名,测试了下,发现中文文件名都显示乱码,
文件都是UTF-8编码的。原生PHP测试中使用没有这个问题。特来请教。
以下是TP中代码部分:

 public function index(){        $dir="./Public/Articles"; //文章目录        $data=$this->dirList($dir);        $arr=array();        foreach($data as $v){            $arr[]=$v;        }       print_r($arr); //中文乱码       $this->ajaxReturn($arr);    }    public function dirList($dir){            $arr=scandir($dir);            foreach($arr as $val){                if($val!='.' && $val!='..'){                    $arr2[]=$val;                }            }        return $arr2;    }

如图:


回复讨论(解决方案)

window 系统的中文文件名都是 gbk 编码的

您认为是小问题吗?非也!
如果连赖以生存的环境都不甚了了,不出大问题才怪呢

您认为是小问题吗?非也!
如果连赖以生存的环境都不甚了了,不出大问题才怪呢


就算我把文件改成GBK编码,也是一样的结果。原生PHP是正常的,不会乱码。所以不知道是怎么回事。
另外吐槽下,PHP打开一个中文文本,还要转个编码,实在是太土了。

在ajaxReturn前设置header头呢?
header('Content-type:application/json;charset=utf-8');

在ajaxReturn前设置header头呢?
header('Content-type:application/json;charset=utf-8');


不可以。我后来加了
        header('Content-type:text/html;charset=gbk');

倒是可以打印出中文,但是ajax返回的data那边显示出来就是NULL,实在郁闷了。


在ajaxReturn前设置header头呢?
header('Content-type:application/json;charset=utf-8');


不可以。我后来加了
        header('Content-type:text/html;charset=gbk');

倒是可以打印出中文,但是ajax返回的data那边显示出来就是NULL,实在郁闷了。
header('Content-type:tex/html;charset=gbk');
ajaxReturn函数默认使用json格式输出,你在header声明为text/html,返回肯定为null啊,改为application/json试试行不行

1、linux 系统的默认字符集是 utf-8
2、简体中文 windows 系统的默认字符集是 gbk
3、TP 的工作字符集是 utf-8

所以 TP 在 linux 中不会有问题
但在 windows 中就会有乱码问题

所以你在读取文件名后,要根据操作系统做字符集转换

php 的 json 函数只支持 utf-8 字符集

PHP打开一个中文文本,还要转个编码,实在是太土了
这只是你自己再给你自己找麻烦

1、linux 系统的默认字符集是 utf-8
2、简体中文 windows 系统的默认字符集是 gbk
3、TP 的工作字符集是 utf-8

所以 TP 在 linux 中不会有问题
但在 windows 中就会有乱码问题

所以你在读取文件名后,要根据操作系统做字符集转换

php 的 json 函数只支持 utf-8 字符集

PHP打开一个中文文本,还要转个编码,实在是太土了
这只是你自己再给你自己找麻烦


我的文本不管是GBK编码还是UTF-8,返正都是乱码。ajax那边接受的文本名显示NULL。
而PHP打开 中文名字的文本,如果不转个编码打开,就是乱码,还有什么好方式么?

在同一环境中显示不同编码的数据,总是要有乱码出现的

windows下的文件名需要执行iconv('GBK','UTF-8',$name); 才能utf8编码输出。

windows读取中文文件名就是要转编码
最好的方式就是换linux,比如windows上装个linux虚拟机什么的
不然就封一个读文件的函数,读文件统一用那个函数,函数里写转换

windows下的文件名需要执行iconv('GBK','UTF-8',$name); 才能utf8编码输出。


路径中带有中文也是这么转换么?试了下好像还是乱码。
$data=$this->dirList($dir);
打印出data必须要转成GBK才能正常显示,UTF8不行。然后在ajax那边返回值就是NULL之类的。

windows读取中文文件名就是要转编码
最好的方式就是换linux,比如windows上装个linux虚拟机什么的
不然就封一个读文件的函数,读文件统一用那个函数,函数里写转换



转了编码也不成功,能指点下么?
$data=$this->dirList($dir); 这里
打印出data必须要加上    header('Content-type:text/html;charset=gbk');
才能在浏览器正常显示,UTF8不行。然后在ajax那边返回值就是NULL之类的。

gbk->utf8
$file = mb_convert_encoding($file, 'utf-8', 'UTF-8,GBK,ASCII');
utf8->gbk
$file = iconv('UTF-8', 'GBK//IGNORE', $file);

gbk->utf8
$file = mb_convert_encoding($file, 'utf-8', 'UTF-8,GBK,ASCII');
utf8->gbk
$file = iconv('UTF-8', 'GBK//IGNORE', $file);


谢谢。昨晚看了一篇博客搞定了,要在遍历的时候把每一个元素转换编码,再存入数组就可以了。
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP中的依赖注入:避免常见的陷阱PHP中的依赖注入:避免常见的陷阱May 16, 2025 am 12:17 AM

DependencyInjection(DI)inPHPenhancescodeflexibilityandtestabilitybydecouplingdependencycreationfromusage.ToimplementDIeffectively:1)UseDIcontainersjudiciouslytoavoidover-engineering.2)Avoidconstructoroverloadbylimitingdependenciestothreeorfour.3)Adhe

如何加快PHP网站:性能调整如何加快PHP网站:性能调整May 16, 2025 am 12:12 AM

到Improveyourphpwebsite的实力,UsEthestertate:1)emplastOpCodeCachingWithOpcachetCachetOspeedUpScriptInterpretation.2)优化的atabasequesquesquesquelies berselectingOnlynlynnellynnessaryfields.3)usecachingsystemssslikeremememememcachedisemcachedtoredtoredtoredsatabaseloadch.4)

通过PHP发送大规模电子邮件:有可能吗?通过PHP发送大规模电子邮件:有可能吗?May 16, 2025 am 12:10 AM

是的,itispossibletosendMassemailswithp.1)uselibrarieslikeLikePhpMailerorSwiftMailerForeffitedEmailSending.2)enasledeLaysBetemailStoavoidSpamflagssspamflags.3)sylectynamicContentToimpovereveragement.4)

PHP中依赖注入的目的是什么?PHP中依赖注入的目的是什么?May 16, 2025 am 12:10 AM

DependencyInjection(DI)inPHPisadesignpatternthatachievesInversionofControl(IoC)byallowingdependenciestobeinjectedintoclasses,enhancingmodularity,testability,andflexibility.DIdecouplesclassesfromspecificimplementations,makingcodemoremanageableandadapt

如何使用PHP发送电子邮件?如何使用PHP发送电子邮件?May 16, 2025 am 12:03 AM

使用PHP发送电子邮件的最佳方法包括:1.使用PHP的mail()函数进行基本发送;2.使用PHPMailer库发送更复杂的HTML邮件;3.使用SendGrid等事务性邮件服务提高可靠性和分析能力。通过这些方法,可以确保邮件不仅到达收件箱,还能吸引收件人。

如何计算PHP多维数组的元素总数?如何计算PHP多维数组的元素总数?May 15, 2025 pm 09:00 PM

计算PHP多维数组的元素总数可以使用递归或迭代方法。1.递归方法通过遍历数组并递归处理嵌套数组来计数。2.迭代方法使用栈来模拟递归,避免深度问题。3.array_walk_recursive函数也能实现,但需手动计数。

PHP中do-while循环有什么特点?PHP中do-while循环有什么特点?May 15, 2025 pm 08:57 PM

在PHP中,do-while循环的特点是保证循环体至少执行一次,然后再根据条件决定是否继续循环。1)它在条件检查之前执行循环体,适合需要确保操作至少执行一次的场景,如用户输入验证和菜单系统。2)然而,do-while循环的语法可能导致新手困惑,且可能增加不必要的性能开销。

PHP中如何哈希字符串?PHP中如何哈希字符串?May 15, 2025 pm 08:54 PM

在PHP中高效地哈希字符串可以使用以下方法:1.使用md5函数进行快速哈希,但不适合密码存储。2.使用sha256函数提高安全性。3.使用password_hash函数处理密码,提供最高安全性和便捷性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)