开发者社区> 问答> 正文

PHP绘图输出文本换行出现乱码问题 ,报错


从一份文件文件读取字符串,然后将GB2312转换为UTF-8,然后进行绘图输出。

增加了一个自动换行的功能,但是一旦到换行的字符输出时就会出现乱码的情况。

//输出图片文字自动换行
function autowrap($fontsize, $angle, $fontface, $string, $width) {
    // 参数分别是 字体大小, 角度, 字体名称, 字符串, 预设宽度
    $content = "";
    // 将字符串拆分成一个个单字 保存到数组 letter 中
    for ($i = 0; $i < mb_strlen($string); $i++) {
        $letter[] = mb_substr($string, $i, 1);
    }
    foreach($letter as $l) {
        $teststr = $content.$l;
        $testbox = imagettfbbox($fontsize, $angle, $fontface, $teststr);
        // 判断拼接后的字符串是否超过预设的宽度
        if (($testbox[2] > $width) && ($content !== "")) {
            $content .= PHP_EOL;
        }
        $content .= $l;
    }
    return $content;
}

。。。。。。。。。
但是如果在文本文件中,进行换行。。。

输出就是正常的,

大家说这是什么原因呢。。。能不能让在TXT中不换行的情况下也是没有乱码的

展开
收起
一枚小鲜肉帅哥 2020-06-20 19:49:21 1174 0
1 条回答
写回答
取消 提交回答
  • 菜不可及的程序猿

    试试 mb_strlen($str, 'utf8')######关键是楼主切字符串的办法弱爆了。

      $width) && ($content !== "")) {
                $content .= PHP_EOL;
            }
            $content .= $l;
        }
        return $content;
    }
    $str = '摇落深知宋玉悲风流儒雅亦吾师怅望千秋一洒泪萧条异代不同时江山故宅空文藻云雨荒台岂梦思最是楚宫俱泯灭舟人指点到今疑';
    $box = autowrap(16, 0, 'simhei.ttf', $str, 160);
    
    var_dump($box);



    ######
       $width) && ($content !== "")) {
                $content .= PHP_EOL;
            }
            $content .= $l;
        }
        return $content;
    }
    $str = '摇落深知宋玉悲风流儒雅亦吾师怅望千秋一洒泪萧条异代不同时江山故宅空文藻云雨荒台岂梦思最是楚宫俱泯灭舟人指点到今疑';
    $box = autowrap(16, 0, 'simhei.ttf', $str, 160);
    
    var_dump($box);
    2020-06-20 19:49:47
    赞同 展开评论 打赏
问答分类:
PHP
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载
复杂PHP系统性能瓶颈排查及优化 立即下载