zqifa的博客

我不管,反正我最萌~

php文字生成图片报错imagettfbbox(): any2eucjp(): invalid code in input string问题解决

今天做项目,thinkphp使用QrCode生成二维码图片写入中文的时候报错

报错信息:

imagettfbbox(): any2eucjp(): invalid code in input string

代码:

$text = '长按识别二维码';
$box = imagettfbbox($fontsize, $angle, $fontfile, $text);

搜索问题,都是说
重新编译PHP,取消–enable-gd-jis-conv这个参数。
查看PHPINFO后,发现确实存在此参数,去掉重新编译,还是未解决问题。

网上找了一些资料,尝试解决,现在把解决经过贴出来。

尝试办法1:重新编译PHP,取消–enable-gd-jis-conv这个参数。

查看PHPINFO后,未发现存在此参数,未解决问题。

尝试办法2:php转换字符编码为utf-8

代码如下:

function strToUtf8($str){
    $encode = mb_detect_encoding($str, array("ASCII",'UTF-8',"GB2312","GBK",'BIG5'));

    if($encode == 'UTF-8'){
        return $str;
    }else{
        return mb_convert_encoding($str, 'UTF-8', $encode);
    }
}
$text = '长按识别二维码';
$box = imagettfbbox($fontsize, $angle, $fontfile, strToUtf8($text));

未解决。

尝试办法3:自定义了辅助函数,转换编码

代码如下:

function to_unicode($string)
{
    $str = mb_convert_encoding($string, 'UCS-2', 'UTF-8');
    $arrstr = str_split($str, 2);
    $unistr = '';
    foreach ($arrstr as $n) {
        $dec = hexdec(bin2hex($n));
        $unistr .= '&#' . $dec . ';';
    }
    return $unistr;
}

尝试办法4:使用mb_encode_numericentity函数转换字符编码

代码如下:

$encoded_char = mb_encode_numericentity('长按识别二维码', array(0x0080, 0xffff, 0, 0xffff), 'UTF-8');

使用示例代码如下:

$text = '长按识别二维码';
$text = mb_encode_numericentity($text, array(0x0080, 0xffff, 0, 0xffff), 'UTF-8');
$box = imagettfbbox($fontsize, $angle, $fontfile, strToUtf8($text));

问题得到解决。

作者:zqifa

出处:https://www.l1mn.com

原文地址:https://www.l1mn.com/p/kvuej.html

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

Copyright © zqifa 联系方式:z___qf@163.com