PHP mb_ucfirst a mb_lcfirst

V PHP funkce ucfirst, která převede první znak v řetězci na velké písmeno. Stejně jako ostatní PHP funkce pro zvětšování a zmenšování písmen si ale neporadí s diakritikou. PHP to řeší knihovnou Multibyte String Functions. Háček je, že zrovna funkce mb_ucfirst zde zastoupena není.

Není to ideální, ale dá se s tím něco dělat. Náhražková funkce může vypadat takto:

function mb_ucfirst($string, $encoding = null) {
	if (is_null($encoding)) {
		$encoding = mb_internal_encoding();
	}
	return mb_strtoupper(mb_substr($string, 0, 1, $encoding)).mb_substr($string, 1, null, $encoding);
}

Zmenšit první písmeno není potřeba tak často, ale můžeme se to stát. Stejně jako ucfirst, tak ani lcfirst nemá svoji mb_ variantu. Řešení je stejné, jen mb_strtoupper vyměníme za mb_strtolower.

function mb_lcfirst($string, $encoding = null) {
	if (is_null($encoding)) {
		$encoding = mb_internal_encoding();
	}
	return mb_strtolower(mb_substr($string, 0, 1, $encoding)).mb_substr($string, 1, null, $encoding);
}

Ano, bylo by krásné, kdyby PHP nabízelo i tyto mb_ funkce. Ještě krásnější by bylo, kdyby základní funkce pro práci s řetězci byli multibyte safe. Jenže jako to tak vypadá, ani jedno není na pořadu dne.