[6] | 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 | } |
---|