在做列表页时候,文章内容需要裁减,恰好遇到裁减的地方有一个emoji被裁减了,因为emoji编码不符合utf-8编码的规范,所以导致转换成json时候出现错误,
这时候我使用了
//修复转码问题JSON_ERROR_UTF8
//https://www.php.net/manual/zh/function.json-last-error.php
$value->content =mb_convert_encoding($value->content, "UTF-8", "auto");
在我本地是没问题的,可以成功把array转换成json并输出到客户端
但是在我的服务器上面却不行,并且没有看到任何报错直接返回500,
这是因为我把环境变量设置成了production,这种情况下是不会给客户端提供错误信息的,把它改为testing或者dev就可以
关注apache设置环境变量
- 找到apache对应站点的配置
- 添加代码 SetEnv CI_ENV testing
<VirtualHost *:8081>
ServerName 81.69.14.69
DocumentRoot /var/www/html/ci_project
<Directory /var/www/html/ci_project>
Options FollowSymLinks
AllowOverride All
#Require all denied
Require all granted
</Directory>
SetEnv CI_ENV testing
</VirtualHost>
最终通过报错找到了答案https://stackoverflow.com/questions/37441150/mb-convert-encoding-error-call-to-undefined-function-mb-convert-encoding
应为缺少了模块导致的,执行以下命令后再重启apache就可以了
sudo apt-get install php-mbstring # Debian, Ubuntu
sudo yum install php-mbstring # RedHat, Fedora, CentOS