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

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

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