/libraries/phputf8/ucwords.php

https://bitbucket.org/kraymitchell/fcd · PHP · 44 lines · 11 code · 3 blank · 30 comment · 0 complexity · 5f78ef5e8e805a7b5c2dac0391471ebf MD5 · raw file

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