wordpress验证码插件 Mimi Captcha 在本地win系统报错导致验证码无法显示

作者: JONE 分类: 编程 发布时间: 2020-12-06 10:53

找到具体问题所在了,因为win系统默认是gbk字符集,php代码是utf8字符集,在读取字体文件时,因路径存在中文,用utf8字符集的路径去读gbk字符集的文件名所以读取失败,因为我找不到可以获取系统字符集的方法,所以最好的解决方案还是在文件路径中不要用中文名

=======分割线,以下方法不正确======

复制代码到本地win10系统,却发现管理后台登录因验证码无法正常显示导致无法登录。

遂先把验证码的 url 提取出来单独访问 http://local.test.cn/wp-content/plugins/mimi-captcha/captcha.php?rand=0.7802382756240938

提示图像因存在错误无法正常显示。

按照url找到对应的插件php文件,/wp-content/plugins/mimi-captcha/captcha.php

require_once('captcha-image.php');
$captcha = new Mimi_Captcha_Image($code, $captcha_flag);
$captcha->entry();

发现验证码图片最终是由 captcha-image.php 这个文件实现。

注释掉图片输出header 让代码错误显示出来

 

通过报错发现是字体读取错误,此代码之前在linux服务器上是正常运行,在本地出现这个错误,而且这个函数读取的文件名为中文,那么极大可能就是字符集的问题。

找到问题那就简单了。解决代码如下。

// 判断当前获取文件名的字符集,并将该文件名转成utf8字符集
$encode = mb_detect_encoding($fontname, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));
$fontname = mb_convert_encoding($fontname, 'UTF-8', $encode);