PHP-命令执行乱码的解决(Thinkphp)
2023-03-29 23:03:03
324
{{single.collect_count}}

前言

在使用thinkphp的时候又双叒叕遇到了一个bug,在命令执行的时候回显中文信息会乱码

软件开发中的乱码

PHP:iconv - Manual

一、问题

有一个demo的操作用于命令执行并将命令执行后的结果传到demo视图中
含有中文的信息会变成乱码,就算是在操作中用了header也是一样

在这里插入图片描述

此时的视图设置了gb2312的字符集,还是会乱码

在这里插入图片描述

在这里插入图片描述

但是我发现在thinkphp之外的页面,用这两种方法都是可以解决乱码的问题
所以可以判断是thinkphp在我们执行header函数之前就设置好了编码,编码被设置了就没法重复设置(我推测的)

在这里插入图片描述

在这里插入图片描述

之后发现是thinkphp\library\think\Response.php里面的$charset来控制html输出页面字符集

在这里插入图片描述

但是在Response.php类中只找到了一个contentType方法,用了之后还是不行(也可能是我使用方式的问题)

在这里插入图片描述
在这里插入图片描述

二、解决

  • 乱码的原因是命令执行后获取的内容是gbk编码的字符串,但是输出页面却是utf-8编码格式
  • 对于普通的php,可以通过header或者是html页面设置编码为gbk、gb2312来修复中文编码的问题
    但是如果输出页面都改成gbk、gb2312的话,很容易出现其他语言乱码的问题
  • 最后发现php有一个函数iconv可以修改字符串的编码,这样的话就不需要修改thinkphp原框架的内容了

在这里插入图片描述

在这里插入图片描述

回帖
全部回帖({{commentCount}})
{{item.user.nickname}} {{item.user.group_title}} {{item.friend_time}}
{{item.content}}
{{item.comment_content_show ? '取消' : '回复'}} 删除
回帖
{{reply.user.nickname}} {{reply.user.group_title}} {{reply.friend_time}}
{{reply.content}}
{{reply.comment_content_show ? '取消' : '回复'}} 删除
回帖
收起
没有更多啦~
{{commentLoading ? '加载中...' : '查看更多评论'}}