php的imagettftext 函数出现乱码的解决方法:今天遇到一个问题,就是往图片上打文字水印,当是汉字的时候出现了乱码,是英文时候并没有出现乱码。

查资料后最终找到两种解决方案,分别如下:

1、编译php级,重新编译gd库扩展

就是在编译的时候多了这个选项。

--enable-gd-jis-conv

去掉以后就可以了,好像是个bug,不过还好暂时解决了。也能用了。

贴上官方的解释:

There is no fallback ot UTF-8. It accepts UTF-8 by default. The problem

about JIS is when you pass a non UTF-8 string, it can be seen as JIS

enconded string.

About the mbstring issues, I have no idea how it works and how it

affects the input parameters. It is something happening before we got

the hand in the gd function.

Please try using:

- Without mbstring, with jis enabled

- Without mbstring, without jis

2、php代码级,即通过转换为unicode编码解决此问题

原理:

虽然 imagettftext() 文档标 明只接受UTF-8编码,但如果PHP编译时启用–enable-gd-jis-conv选项的话,那么非ASCII字符(例如汉字、拼音、希腊文和箭 头) 会被当成EUC-JP编码 (phpinfo中美其名曰“支持JIS编码的字体”), 从而导致乱码(由于西文字体没有假名或汉字,一般表现为全部是方框)。

Although imagettftext() documentation indicates it only accepts UTF-8 encoding, but if –enable-gd-jis-conv is specified when compiling PHP, then non-ASCII characters (like Chinese, accented characters, Greek and arrows) will be (mis-)treated as EUC-JP encoding (referred to as “JIS-mapped Japanese Font Support” in phpinfo) leading to mojibake (this usually shows up as hollow rectangles, as most fonts for western text lacks glyphs for kanji or kana).

网上大部分对此的解决方法是重新编译PHP,但是这只有自己架设服务器的时候才有用。对于付费 空间 (特别是每个月不到1美元的付费空间) 就没辙了。不过imagettftext()也接受另外一种字符表示方法,类似HTML的字符参考。说“类似”是因为GD只接受数字参考,所以内部函数 (如 mb_convert_encoding) 转出来的没用。 以下的函数可以将UTF-8转换成字符参考:

A popular response online is to recompile PHP, but that only works if you’re running your own server. For paid hosting (especially paid hosting that costs less than a dollar a month) this method is kinda stumped. But imagettftext() also accepts another way for representing characters, similar to HTML’s character references. “Similar” because it only accepts numeric references, so named references converted by internal functions (like mb_convert_encoding) is of no use. The function below converts UTF-8 into character references:

$str = gb2utf8($str); //先把字符串转换成utf8,然后用函数再次转换

ImageTTFText($ims[$char_num-1], $fontsize, 0, 0, 20, $font_color, $fnt, to_entities($str));

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;

}

本文地址:http://www.it300.com/article-15424.html

php自定义函数出现乱码,php的imagettftext 函数出现乱码的解决方法相关推荐

  1. 电子邮件乱码产生的主要原因及几种解决方法

    关于电子邮件乱码 --转摘自中国科学院,作者不详     本文主要介绍邮件乱码产生的主要原因及几种解决方法: E-mail编码标准 由于一个汉字是用两个扩展 ASCII码表示,对DOS.Windows ...

  2. python出现中文乱码 RuntimeWarning: Glyph 24180 missing from current font.解决方法

    文章目录 遇到的问题 解决方法 参考 解决方法:在画图前添加这样一句代码 plt.rcParams['font.sans-serif'] = ['SimHei'] 遇到的问题 环境:win10,编辑器 ...

  3. 槽函数会被执行多次的问题原因及解决方法

    今天在项目中发现发送一次信号,槽函数被执行多次,如下: connect(pBtn, &QAbstractButton::clicked, this, &QtWidgetsApplica ...

  4. python 重命名文件出现乱码_下载的文件名总是「乱码」?这里有各平台的解决方法...

    说起「乱码」,没遇到过的电脑用户可能是极少的,尤其在国内中文环境下.暴露年龄的「烫烫烫」系列乱码已经绝迹,现如今遇到的往往是类似「%E9%AB%98%E9%A2%91」和「èªå¨é£è±è½»ä¼¼ ...

  5. Dev-C++中关于函数 was not declared in this scope报错的解决方法

    1.先报错在哪一行看一下这行的上下行有没有错有时候这个提示可能是告诉你错误可能是出现在这个附近 2.看传入这个函数的实参是否定义了,有没有写错字符的情况.这个参数是否超过了它的"生存范围&q ...

  6. php输出excel表格乱码和第一个0不显示的解决方法(详细)

    而关于php的也有,但是大多都是用phpExcel导出的方法或者spreadsheet等类或者控件之类的导出方法,而我所在维护的系统却用很简单的方法,如下,网上很少有讲如何设置要导出数据的EXcel格 ...

  7. mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...

    mysql utf8mb4 保存微信昵称特殊字符报错方法 公众号二次开发,在处理用户昵称的时候发现有的时候一些emoji是4字节的表情无法保存入库,经过查找资料发现是因为字段的编码问题造成的, utf ...

  8. 在学习EasyX过程中,遇到“没有与参数列表匹配的重载函数loadimage”,修改解决方案字符集属性无效后的解决方法

    在学习EasyX过程中,遇到"没有与参数列表匹配的重载函数loadimage"的问题,在网上查询后,很多人给出的方法是--修改解决方案字符集属性. 解决"E0304&qu ...

  9. return导致内存泄露。C函数中不要有多次return,以及其解决方法。goto的用法。

    函数中随处return,是造成我们资源泄露和程序死锁的主要根源.很多同志写过类似的代码,函数中创建了和引用了多个资源,中间使用的过程中出错了,程序return,经典的代码是这样的: void fun( ...

最新文章

  1. 今日头条反爬措施形同虚设,论多平台协同在安全方面的重要性
  2. 自定义变量 配置文件_「系统架构」Nginx调优之变量的使用(3)
  3. 【WPF】如何使用wpf实现屏幕最前端的绘图?
  4. android注册广播监听按钮,Android实现广播监听HOME键操作
  5. [译] 标准化的包布局(Standard Package Layout)
  6. 数据存储四种常见方式
  7. SQL注入(1)--判断是否存在SQL注入漏洞
  8. 【C++基础】时间类型详解(转)
  9. 云计算将会让数据中心消失?
  10. ES6模块的循环加载
  11. Icode编程>>>图形化编程>>>1级训练场>>>重复执行入门
  12. 关于word中如何生成自动目录以及页码编排
  13. [渝粤教育] 南京森林警察学院 森林植物识别技术 ——珍稀植物识别 参考 资料
  14. 冉宝的每日一题-8月16日回溯法+ 动态规划压缩
  15. STM32F7--->FMC(可变存储控制器) Flexible Memory Controller
  16. 崋佬论币;从哪里跌倒,就从哪里爬起来
  17. CCNA学习笔记——第一章:OSI 和 TCP/IP 模型
  18. 蚂蚁花呗的交易分期(有别于账单分期)
  19. 9X、2000、XP、2003所有注册表设置
  20. window证书管理

热门文章

  1. 推荐!150篇土壤微生态+60篇根际微生物近两年高影响因子文献合集
  2. NanoPlot:三代纳米孔测序数据质量评估
  3. Microbiome:马铃薯疮痂病与土壤微生物组关系新进展
  4. 中文扩增子分析视频教程推荐
  5. pandas使用query函数基于组合索引筛选dataframe的数据行(与and、或or、非not)
  6. R语言关联规则挖掘数据集预览、分析、筛选:项目数的分布形态(分位数、密度图)、itemFrequency函数统计每一项目在所有事务中出现的次数、最常发生的项目、数据筛选(交易的集合项目大于1)
  7. R语言构建xgboost模型:交叉验证(cross validation)训练xgboost模型,配置自定义的损失函数评估函数并使用交叉验证训练xgboost模型
  8. R语言ggplot2可视化强制设置x轴、y轴坐标的起始点为0或者其他实战
  9. R语言KMeans聚类模型示例
  10. html5 文字定义线宽,html 5画布线宽