当前位置: 首页 > 后端技术 > PHP

PHPGD库生成图片时,对于英文换行符

时间:2023-03-29 14:09:18 PHP

前言最近开发遇到后端生成图片时的英文换行代码/**字符串相关处理*/classStringUtils{/***英文字符串换行*如果是字母,到达换行的地方breaks,需要读取这个字符的下一个字符是否为字母,如果是,需要返回最后一个不是字母的地方*注意:中英文*/publicstaticfunctionwrap($str,$max_len){$arr=[];$len=mb_strlen($str);如果($len==0){返回$arr;}if($len<=$max_len){$arr[]=$str;返回$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;返回$arr;}/***中文换行*/publicstaticfunctionwrapCh($str,$max_len){$arr=[];$len=mb_strlen($str);如果($len==0){返回$arr;}if($len<=$max_len){$arr[]=$str;返回$arr;}$page=ceil($len/$max_len);对于($i=0;$i<$page;$i++){$temp_str=mb_substr($str,$i*$max_len,$max_len);$arr[]=$temp_str;}返回$arr;}/***判定是否单词*/publicstaticfunctionisWord($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"];returnin_array($chr,$wordArr);}}执行效果//String$str="hehehepostlinkTheBritishCharlesBabbagewasthe一台带附加费的分析机的发明者两部手机打孔vvvvvvv卡,以及差分机,都是计算机的先驱,他的名字被赋予了mwei或picoether,10到-12以太。";$arr=StringUtils::wrapCh($str,20);echo"
暴力换行

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

";foreach($arras$k=>$v){echo$v."
";}暴力打印结果newlinehehehepostlink英国人CharlesBabbage是分析机的发明者附加费两个手机打卡机送vvvvv版和vv卡,还有一个差分机,都是电脑的前身,他的名字是给mwei或者picoether,10给-12ether。正确换行,呵呵,发链接英国人查尔斯·巴贝奇是发明了一台带附加费的分析机,两部手机打卡,发vvvvv版,发vv卡,还有差分机,都是计算机的先驱,他的名字被赋予到mwei或皮醚,10到-12醚。