Home > Article > Backend Development > How to intercept string function in php (without interrupting words)_PHP tutorial
In the project, I encountered a requirement. For example, I want to intercept a string of characters, 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. The following test:
//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 half of a word
* note: It is not applicable to Chinese, but of course it can be modified
* note: Currently This function has a small bug. $cutlength does not refer to the length, but the calculation stops when the length of all words 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();
//Disorganize the text
$wrap = wordwrap($string,1,"t");
//Create 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;
}
}
Source of this article: http://www.52blogger.com/archives/819