Inici > Programació, Web > ucfirst y lcfirst compatibles con acentos (Multi Byte)

ucfirst y lcfirst compatibles con acentos (Multi Byte)

divendres, 1 d'abril de 2011 Imprimir

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)

// 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

Comentaris tancats.