1 | <?php |
---|
2 | |
---|
3 | /** |
---|
4 | * @version $Id: ucwords.php,v 1.1 2006/02/25 13:50:17 harryf Exp $ |
---|
5 | * @package utf8 |
---|
6 | * @subpackage strings |
---|
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 | { |
---|
21 | // Note: [\x0c\x09\x0b\x0a\x0d\x20] matches; |
---|
22 | // Form feeds, horizontal tabs, vertical tabs, linefeeds and carriage returns |
---|
23 | // This corresponds to the definition of a "word" defined at http://www.php.net/ucwords |
---|
24 | $pattern = '/(^|([\x0c\x09\x0b\x0a\x0d\x20]+))([^\x0c\x09\x0b\x0a\x0d\x20]{1})[^\x0c\x09\x0b\x0a\x0d\x20]*/u'; |
---|
25 | |
---|
26 | return preg_replace_callback($pattern, 'utf8_ucwords_callback', $str); |
---|
27 | } |
---|
28 | |
---|
29 | /** |
---|
30 | * Callback function for preg_replace_callback call in utf8_ucwords |
---|
31 | * You don't need to call this yourself |
---|
32 | * @param array of matches corresponding to a single word |
---|
33 | * @return string with first char of the word in uppercase |
---|
34 | * @see utf8_ucwords |
---|
35 | * @see utf8_strtoupper |
---|
36 | * @package utf8 |
---|
37 | * @subpackage strings |
---|
38 | */ |
---|
39 | function utf8_ucwords_callback($matches) |
---|
40 | { |
---|
41 | $leadingws = $matches[2]; |
---|
42 | $ucfirst = utf8_strtoupper($matches[3]); |
---|
43 | $ucword = utf8_substr_replace(ltrim($matches[0]), $ucfirst, 0, 1); |
---|
44 | |
---|
45 | return $leadingws.$ucword; |
---|
46 | } |
---|