In the project, I encountered a requirement. For example, I want to intercept a string of strings, but I don’t want to intercept half of the words. I looked at the mb_strimwidth() function in the PHP manual. It is said that it will not interrupt. Word, but the test was not successful, so I wrote it myself first. Although there were some minor problems, it was barely usable. I will encapsulate it better when I have time. The implementation principle of this function is to use wordwrap() to interrupt the word, and then use mb_strlen() calculates the length of the word and intercepts it to the length that needs to be intercepted. Test as follows:
//Original string
$str = 'readonly this boolean attribute indicates that the user cannot modify the value of the control. Unlike the disabled attribute, the readonly attribute does not prevent the user from clicking or selecting in the control. long ge blog's The value of a read-only control is still submitted with the form.';
echo wordcut($str,100);
// Result:
readonly this boolean attribute indicates that the user cannot modify value of control. Unlike disabled attribute, …
/**
* This function intercepts English strings and does not interrupt English words, that is, it does not cut a word in half
* note: Not applicable to Chinese, of course you can change it
* note: There is a small bug in this function at present. $cutlength does not refer to the length, but calculates the length of all words and stops when it reaches this number. In fact, the length of spaces is ignored
*/
Function wordcut($string, $cutlength = 250, $replace = ‘…’){
//If the length is insufficient, return directly
if(mb_strlen($string) <= $cutlength){
return $string;
}else{
// Calculate the total length of the current word
$totalLength = 0;
$datas = $newwords = array();
// Scramble the text
$wrap = wordwrap($string,1,"t");
// form an array
$wraps = explode("t",$wrap);
foreach ($wraps as $tmp){
// Calculate the length of each word
$datas[$tmp] = mb_strlen($tmp);
}
foreach ($datas as $word => $length){
//Save the total length of the word
$totalLength += $length;
//If it is less than the intercepted length, save it
if($totalLength < $cutlength){
array_push($newwords,$word);
}else{
break;
}
}
//Generate new string
$str = trim(implode(" ",$newwords));
Return empty($str) ? $str : $str.’ ‘.$replace;
}
}