zqifa的博客

我不管,反正我最萌~

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

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

报错信息:

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

代码:

$text = '长按识别二维码';
imagettftext($im, 11, 0, 5, 11, $black, $font,  $text);

报错原因:

在生成图片的过程中使用了imagettftext(),发现该函数 imagettftext() 文档标 明只接受UTF-8编码,但如果PHP编译时启用–enable-gd-jis-conv选项的话,那么非ASCII字符(例如汉字、拼音、希腊文和箭 头) 会被当成EUC-JP编码 (phpinfo中美其名曰“支持JIS编码的字体”), 从而导致乱码(由于西文字体没有假名或汉字,一般表现为全部是方框)或者报错any2eucjp(): invalid code in input string。

经过长时间搜索,终于通过自定义转码函数的方式解决了这个错误

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

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

尝试解决办法2:字符串处理

将输入的字符串转换下,对字符串通过to_entities处理,代码如下:

function to_entities($string){
    $len = strlen($string);
    $buf = "";
    for($i = 0; $i < $len; $i++){
        if (ord($string[$i]) <= 127){
            $buf .= $string[$i];
        } else if (ord ($string[$i]) <192){
            //unexpected 2nd, 3rd or 4th byte
            $buf .= "�";
        } else if (ord ($string[$i]) <224){
            //first byte of 2-byte seq
            $buf .= sprintf("&#%d;",
                ((ord($string[$i + 0]) & 31) << 6) +
                (ord($string[$i + 1]) & 63)
            );
            $i += 1;
        } else if (ord ($string[$i]) <240){
            //first byte of 3-byte seq
            $buf .= sprintf("&#%d;",
                ((ord($string[$i + 0]) & 15) << 12) +
                ((ord($string[$i + 1]) & 63) << 6) +
                (ord($string[$i + 2]) & 63)
            );
            $i += 2;
        } else {
            //first byte of 4-byte seq
            $buf .= sprintf("&#%d;",
                ((ord($string[$i + 0]) & 7) << 18) +
                ((ord($string[$i + 1]) & 63) << 12) +
                ((ord($string[$i + 2]) & 63) << 6) +
                (ord($string[$i + 3]) & 63)
            );
            $i += 3;
        }
    }
    return $buf;
}

把中文使用to_entities函数转换一下,代码示例:

$text = '长按识别二维码';
imagettftext($im, 11, 0, 5, 11, $black, $font,  to_entities($text));

问题得到解决。

作者:zqifa

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

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

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

公告

昵称:zqifa

站龄: 3年11个月

博客持续完善ing,敬请期待...

打滚求打赏(๑ ̄ ̫  ̄๑)

此处弱弱求打赏~~万一有好心人呢~~

支付宝酱

支付宝赞助

微信酱

微信赞助

随笔分类

php(110)

linux(63)

python(44)

web前端(39)

js(35)

服务器(33)

mysql(30)

html(24)

docker(23)

centos(22)

windows(22)

django(20)

前端设计(18)

git(16)

数据库(14)

算法(14)

常用软件(14)

编程进阶(13)

字符编码(13)

jquery(12)

更多

我的标签

php(106)

linux(47)

python(45)

js(34)

mysql(30)

centos(28)

web前端(23)

windows(22)

docker(22)

django(20)

更多

相册

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