note 96754 added to function.wordwrap

From: Date: Sun, 14 Mar 2010 16:20:38 +0000
Subject: note 96754 added to function.wordwrap
Groups: php.notes 
Request: Send a blank email to php-notes+get-167014@lists.php.net to get a copy of this message
Sanneschaap posted a function to wrap a string based on the actual pixel length. I simplified the function to minimize server load. Note: this is based on Arial, using the most common characters. Not every font has the same character widths, and different operating systems have different fonts. Also, this becomes less accurate when the font size increases. Using a 10px-14px Arial/sans-serif font, you'll be alright though. Some language specific characters could be added to the function, but if the function can't find the character it will default to the most common character width, so it's not required. Arguments: $strings = string or array of strings to be processed. $limit = maximum width in pixels (must be a number only). $fontsize = the used font size (must be a number only; default is 11). $suffix = the suffix used if a string is too long (must be a string; default is '...'). Function: <?php function crop_string($strings, $limit, $fontsize = 11, $suffix = '...') { if(is_string($strings)) $array[] = $strings; else $array = $strings; if(is_array($array)) { $c['@'] = 1; $c['%'] = $c['W'] = $c['w'] = 0.909413854; $c['A'] = $c['G'] = $c['M'] = $c['O'] = $c['Q'] = $c['V'] = $c['Y'] = $c['m'] = 0.728241563; $c['&'] = $c['B'] = $c['C'] = $c['D'] = $c['H'] = $c['K'] = $c['N'] = $c['R'] = $c['S'] = $c['U'] = $c['X'] = $c['Z'] = 0.637655417; $c['#'] = $c['$'] = $c['+'] = $c['0'] = $c['1'] = $c['2'] = $c['3'] = $c['4'] = $c['5'] = $c['6'] = $c['7'] = $c['8'] = $c['9'] = $c['<'] = $c['='] = $c['>'] = $c['?'] = $c['E'] = $c['F'] = $c['L'] = $c['P'] = $c['T'] = $c['_'] = $c['a'] = $c['b'] = $c['c'] = $c['d'] = $c['e'] = $c['g'] = $c['h'] = $c['n'] = $c['o'] = $c['p'] = $c['q'] = $c['s'] = $c['u'] = $c['v'] = $c['x'] = $c['y'] = $c['z'] = $c['~'] = 0.547069272; $c['J'] = $c['^'] = $c['k'] = 0.456483126; $c['"'] = $c['('] = $c[')'] = $c['*'] = $c['-'] = $c['`'] = $c['f'] = $c['r'] = $c['{'] = $c['}'] = 0.36589698; $c[' '] = $c[','] = $c['.'] = $c['/'] = $c[':'] = $c[';'] = $c['['] = $c['\\'] = $c[']'] = $c['t'] = 0.275310835; $c['!'] = $c['\''] = $c['I'] = $c['i'] = $c['j'] = $c['l'] = $c['|'] = 0.184724689; $suffixlength = 0; for($i = 0; $i < strlen($suffix); $i++) $suffixlength += ($c[$suffix[$i]] * $fontsize); // Check suffix length for($i = 0; $i < count($array); $i++) { $result = 0; for($j = 0; $j < strlen($array[$i]); $j++) { $result += ($c[$array[$i][$j]] == true) ? ($c[$array[$i][$j]] * $fontsize) : (0.547069272 * $fontsize); if($result < ($limit - $suffixlength)) $note = $j-1; // Note: (limit-suffix length) reached if($result > $limit) { $array[$i] = substr($array[$i], 0, $note) . $suffix; // Back to note, add suffix, save new string $j = strlen($array[$i]); // Stop loop } } } return $array; } else return false; } ?> ---- Server IP: 69.147.83.197 Probable Submitter: 83.87.224.73 ---- Manual Page -- http://www.php.net/manual/en/function.wordwrap.php Edit -- https://master.php.net/note/edit/96754 Del: integrated -- https://master.php.net/note/delete/96754/integrated Del: useless -- https://master.php.net/note/delete/96754/useless Del: bad code -- https://master.php.net/note/delete/96754/bad+code Del: spam -- https://master.php.net/note/delete/96754/spam Del: non-english -- https://master.php.net/note/delete/96754/non-english Del: in docs -- https://master.php.net/note/delete/96754/in+docs Del: other reasons-- https://master.php.net/note/delete/96754 Reject -- https://master.php.net/note/reject/96754 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#167014) next »