今天做项目,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。
经过长时间搜索,终于通过自定义转码函数的方式解决了这个错误
查看PHPINFO后,未发现存在此参数,未解决问题。
将输入的字符串转换下,对字符串通过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));
问题得到解决。
出处:www.l1mn.com
原文标题:php文字生成图片报错imagettftext(): any2eucjp(): invalid code in input string问题解决
原文地址:https://www.l1mn.com/p/q7d842.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
Copyright © L1MN.COM 联系方式:l1mnfw@163.com