Llevo un rato peleándome con esto y finalmente he encontrado solución.
El caso es que los de PHP al hacer los métodos MultiByte (un apaño que harían al ver que se olvidaron del resto de juegos de caracteres…) no hicieron ni el de primera letra mayúscula ni minúscula.
Ambos métodos me son muy útiles para activar / desactivar usuarios de una wiki (ya que un usuario no puede acceder al sistema mediawiki si tiene la primera letra en minúscula), así que en realidad no he tenido más remedio que hacerlo (nooo, yo no queríaaa..!! xD)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php // First letter uppercase if (!function_exists('mb_ucfirst')) { function mb_ucfirst($str, $to_lower = false, $charset = 'utf-8') { $first = mb_strtoupper(mb_substr($str, 0, 1, $charset), $charset); $end = mb_substr($str, 1, mb_strlen($str, $charset), $charset); // Convert them all to lowercase (if specified) if ($to_lower) { $end = mb_strtolower($end, $charset); } return $first . $end; } } // First letter lowercase if (!function_exists('mb_lcfirst')) { function mb_lcfirst($str, $charset = 'utf-8') { $first = mb_strtolower(mb_substr($str, 0, 1, $charset), $charset); return $first . mb_substr($str, 1, mb_strlen($str, $charset), $charset); } } |
Como podréis ver al método mb_ucfirst
le he añadido un parámetro $to_lower
que sirve para convertir el resto de la frase a minúscula (muy útil contra hoygans).
El parámetro $charset
es el que más me ha dado por culo (al principio no lo tenía en cuenta); tened en cuenta vuestra codificación de caracteres y cambiadlo directamente en la función si es preciso.
Buen fin de semana!
Referencias