note 98724 added to function.wordwrap

From: Date: Fri, 02 Jul 2010 15:41:23 +0000
Subject: note 98724 added to function.wordwrap
Groups: php.notes 
Request: Send a blank email to php-notes+get-170662@lists.php.net to get a copy of this message
The multibyte wordwrap functions in the comments all seem to break in the middle of word. This one should break on spaces, where possible. <?php /** * Multibyte capable wordwrap * * @param string $str * @param int $width * @param string $break * @return string */ function mb_wordwrap($str, $width=74, $break="\r\n") { // Return short or empty strings untouched if(empty($str) || mb_strlen($str, 'UTF-8') <= $width) return $str; $br_width = mb_strlen($break, 'UTF-8'); $str_width = mb_strlen($str, 'UTF-8'); $return = ''; $last_space = false; for($i=0, $count=0; $i < $str_width; $i++, $count++) { // If we're at a break if (mb_substr($str, $i, $br_width, 'UTF-8') == $break) { $count = 0; $return .= mb_substr($str, $i, $br_width, 'UTF-8'); $i += $br_width - 1; continue; } // Keep a track of the most recent possible break point if(mb_substr($str, $i, 1, 'UTF-8') == " ") { $last_space = $i; } // It's time to wrap if ($count > $width) { // There are no spaces to break on! Going to truncate :( if(!$last_space) { $return .= $break; $count = 0; } else { // Work out how far back the last space was $drop = $i - $last_space; // Cutting zero chars results in an empty string, so don't do that if($drop > 0) { $return = mb_substr($return, 0, -$drop); } // Add a break $return .= $break; // Update pointers $i = $last_space + ($br_width - 1); $last_space = false; $count = 0; } } // Add character from the input string to the output $return .= mb_substr($str, $i, 1, 'UTF-8'); } return $return; } ?> ---- Server IP: 92.48.74.199 Probable Submitter: 213.143.129.9 ---- Manual Page -- http://www.php.net/manual/en/function.wordwrap.php Edit -- https://master.php.net/note/edit/98724 Del: integrated -- https://master.php.net/note/delete/98724/integrated Del: useless -- https://master.php.net/note/delete/98724/useless Del: bad code -- https://master.php.net/note/delete/98724/bad+code Del: spam -- https://master.php.net/note/delete/98724/spam Del: non-english -- https://master.php.net/note/delete/98724/non-english Del: in docs -- https://master.php.net/note/delete/98724/in+docs Del: other reasons-- https://master.php.net/note/delete/98724 Reject -- https://master.php.net/note/reject/98724 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#170662) next »