<?php $str = '举头望明月低头思故乡'; $width = 18; $fontsize = 18; $num = $width/$fontsize; /** * 自动给文字增长换行 * @param int $str 字符串 * @param int $num 字数 一个汉字算1位,2个字母或者数字为1位 * @param string $line_break 换行符号 \n * @return string 返回字符串 */ function break_string($str,$num){ preg_match_all("/./u", $str, $arr);//将全部字符转成单个数组 //print_r($arr); $strstr = ''; $width = 0; $arr = $arr[0]; foreach($arr as $key=>$string){ $strlen = strlen($string);//计算当前字符的长度,一个字母的长度为1,一个汉字的长度为3 //echo $strlen; if($strlen == 3){ $width += 1; }else{ $width += 0.5; } $strstr .= $string; //计算当前字符的下一个 if(array_key_exists($key+1, $arr)){ $_strlen = strlen($arr[$key+1]); if($_strlen == 3){ $_width = 1; }else{ $_width = 0.5; } if($width+$_width > $num){ $width = 0; $strstr .= "\n"; } } } return $strstr; } echo break_string($str,$num,'\\n');