]> projects.mako.cc - scuttle/blob - includes/utf8/ucwords.php
Merge remote-tracking branch 'remotes/gh-mjjstorey/master'
[scuttle] / includes / utf8 / ucwords.php
1 <?php
2 /**
3 * @version $Id: ucwords.php,v 1.1 2006/02/25 13:50:17 harryf Exp $
4 * @package utf8
5 * @subpackage strings
6 */
7
8 //---------------------------------------------------------------
9 /**
10 * UTF-8 aware alternative to ucwords
11 * Uppercase the first character of each word in a string
12 * Note: requires utf8_substr_replace and utf8_strtoupper
13 * @param string
14 * @return string with first char of each word uppercase
15 * @see http://www.php.net/ucwords
16 * @package utf8
17 * @subpackage strings
18 */
19 function utf8_ucwords($str) {
20     // Note: [\x0c\x09\x0b\x0a\x0d\x20] matches;
21     // form feeds, horizontal tabs, vertical tabs, linefeeds and carriage returns
22     // This corresponds to the definition of a "word" defined at http://www.php.net/ucwords
23     $pattern = '/(^|([\x0c\x09\x0b\x0a\x0d\x20]+))([^\x0c\x09\x0b\x0a\x0d\x20]{1})[^\x0c\x09\x0b\x0a\x0d\x20]*/u';
24     return preg_replace_callback($pattern, 'utf8_ucwords_callback',$str);
25 }
26
27 //---------------------------------------------------------------
28 /**
29 * Callback function for preg_replace_callback call in utf8_ucwords
30 * You don't need to call this yourself
31 * @param array of matches corresponding to a single word
32 * @return string with first char of the word in uppercase
33 * @see utf8_ucwords
34 * @see utf8_strtoupper
35 * @package utf8
36 * @subpackage strings
37 */
38 function utf8_ucwords_callback($matches) {
39     $leadingws = $matches[2];
40     $ucfirst = utf8_strtoupper($matches[3]);
41     $ucword = utf8_substr_replace(ltrim($matches[0]),$ucfirst,0,1);
42     return $leadingws . $ucword;
43 }
44

Benjamin Mako Hill || Want to submit a patch?