资讯专栏INFORMATION COLUMN

PHP GD库 生成图片时,对于英文的换行

alaege / 1195人阅读

摘要:前言最近开发遇到后端生成图片时英文的换行贴代码字符串相关处理英文字符串换行如果是字母,并且到了换行的地方,则需要看这个字符的下一个字符是否是字母,如果是的话就需要回到上一个不是字母的地方注意中文和英文上一次出现不是字母的索引位置将单个字符存

前言
最近开发遇到后端生成图片时英文的换行

贴代码

/*
 * 字符串相关处理
 */
class StringUtils
{
    /**
     * 英文字符串换行
     * 如果是字母,并且到了换行的地方,则需要看这个字符的下一个字符是否是字母,如果是的话就需要回到上一个不是字母的地方
     * 注意:中文和英文
     */
    public static function wrap($str, $max_len) {
        $arr = [];
        $len = mb_strlen($str);
        if ($len == 0) {
            return $arr;
        }
        if ($len <= $max_len) {
            $arr[] = $str;
            return $arr;
        }
        $w_len = 0;
        $w_str = "";
        $last_index = 0; // 上一次出现不是字母的索引位置
        for ($i = 0; $i < $len; $i++) {
            $sub_str = mb_substr($str, $i, 1); //将单个字符存到数组当中
            $w_str .= $sub_str;
            $w_len++;
            if (!self::isWord($sub_str)) {
                // 记录最后一次出现不是字母的索引
                $last_index = $w_len;
            }
            // 需要换行
            if ($w_len >= $max_len) {
                if (self::isWord($sub_str)) {
                    $w_str_1 = mb_substr($w_str, 0, $last_index);
                    $w_str_2 = mb_substr($w_str, $last_index, $w_len);
                    $w_len = $w_len - $last_index;
                } else {
                    $w_str_1 = $w_str;
                    $w_str_2 = "";
                    $w_len = 0;
                }
                $arr[] = $w_str_1;
                $w_str = $w_str_2;
                $last_index = 0;
            }
        }
        $arr[] = $w_str;

        return $arr;

    }

    /**
     * 中文换行
     */
    public static function wrapCh($str, $max_len) {
        $arr = [];
        $len = mb_strlen($str);
        if ($len == 0) {
            return $arr;
        }
        if ($len <= $max_len) {
            $arr[] = $str;
            return $arr;
        }
        $page = ceil($len / $max_len);
        for ($i = 0; $i < $page; $i++) {
            $temp_str = mb_substr($str, $i * $max_len, $max_len);
            $arr[] = $temp_str;
        }
        return $arr;
    }

    /**
     * 判断是否单词
     */
    public static function isWord($chr) {
        $wordArr = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
        return in_array($chr, $wordArr);
    }

}
执行效果
    // 字符串
    $str = "呵呵呵发链接The British Charles Babbage was the inventor of an analytical machine with附加费两款手机 punch发vvvvv个版本发vv cards, and of a difference engine, both forerunners of the computer, and his name is given to the mwei or picoether, 10 to the -12 ether.";
    $arr = StringUtils::wrapCh($str , 20);
    echo "
暴力换行

"; foreach($arr as $k=>$v){ echo $v . "
"; } $arr = StringUtils::wrap($str , 20); echo "
正确的换行

"; foreach($arr as $k=>$v){ echo $v . "
"; }
打印结果
暴力换行

呵呵呵发链接The British Ch
arles Babbage was th
e inventor of an ana
lytical machine with
附加费两款手机 punch发vvvvv个
版本发vv cards, and of 
a difference engine,
both forerunners of
the computer, and h
is name is given to 
the mwei or picoethe
r, 10 to the -12 eth
er.

正确的换行

呵呵呵发链接The British 
Charles Babbage was 
the inventor of an 
analytical machine 
with附加费两款手机 punch发
vvvvv个版本发vv cards, 
and of a difference 
engine, both 
forerunners of the 
computer, and his 
name is given to 
the mwei or 
picoether, 10 to 
the -12 ether.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31468.html

相关文章

  • 文字处理之二:换行及word-break和word-wrap属性

    摘要:英文换行来到英文,情况就要复杂一些。在英文中有单词的概念,所以在换行时就得考虑单词的完整性。上面介绍的值,主要也是针对英文的,汉字还是按照浏览器的默认行为,装不下就换行。最后显示时,英文还是按照默认行为,中文变成了不换行。 上一篇博客中介绍white-space属性时聊到了换行,这一篇介绍换行的细节。 浏览器的默认行为 浏览器的换行行为,对于中文和英文存在一些差别。 中文换行 正如上一...

    wangxinarhat 评论0 收藏0
  • 【转】css样式自动换行(强制换行

    摘要:原文链接自动换行问题正常字符的换行是比较合理的而连续的数字和英文字符常常将容器撑大挺让人头疼下面介绍的是如何实现换行的方法对于等块级元素正常文字的换行亚洲文字和非亚洲文字元素拥有默认的当定义的宽度之后自动换行正常文字的换行亚洲文字和非亚洲 原文链接:http://blog.csdn.net/ye987987... 自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容...

    ASCH 评论0 收藏0
  • 【转】css样式自动换行(强制换行

    摘要:原文链接自动换行问题正常字符的换行是比较合理的而连续的数字和英文字符常常将容器撑大挺让人头疼下面介绍的是如何实现换行的方法对于等块级元素正常文字的换行亚洲文字和非亚洲文字元素拥有默认的当定义的宽度之后自动换行正常文字的换行亚洲文字和非亚洲 原文链接:http://blog.csdn.net/ye987987... 自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容...

    时飞 评论0 收藏0
  • PHPWord中文手册整理

    摘要:修正中文支持的问题,使用前如果发现乱码,需要进行一些修正解决编码问题,会对输入的文字进行编码转化,如果你使用或者编码的话就会出现乱码,如果你用编码,就查找类库中所有方法中的转码将其删除,如果你采用或者编码,使用进行编码转换。 修正 中文支持的问题,使用前如果发现乱码,需要进行一些修正: 解决编码问题,PHPword 会对输入的文字进行utf8_encode编码转化,如果你使用GBK、...

    wangdai 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<