Pasar de mayúsculas a minúculas sin dolores de cabeza en PHP

Seguro que en PHP más de una ocasión te habrás encontrado con que tienes que pasar alguna cadena de mayúsculas a minúsculas (o al revés) y te has encontrado en esta situación:

echo strtolower("ÑAPA"). PHP_EOL;

Se convierte en:

Ñapa

¡Maldición! ¿Por qué esa maldita ‘Ñ’ no se ha pasado a minúsculas? ¡Enhorabuena! te has adentrado en el maravilloso mundo de los «locale».

Si quieres olvidarte de estos rollos deberías trabajar con otras funciones:

Todas estas funciones nos permiten hacer las conversiones de mayúsculas/minúsculas quitándonos muchos quebraderos de cabeza:

echo mb_convert_case("ÑAPA", MB_CASE_LOWER). PHP_EOL;

Hay varios modos de conversión. Pero, para ser sincero, solo me se para qué funcionan los tres primeros.

Te dejo aquí una pequeña función para que experimentes y, de paso, puedes ver la función constant() que es poco conocida:

function convertir($texto, $modo) {
echo "En el modo: $modo, '" . $texto . "' se convierte en: " . mb_convert_case($texto, constant($modo)). PHP_EOL;
}

convertir("las minúsculas no son MAYÚSCULAS", 'MB_CASE_UPPER');
convertir("las minúsculas no son MAYÚSCULAS", 'MB_CASE_LOWER');
convertir("las minúsculas no son MAYÚSCULAS", 'MB_CASE_TITLE');
convertir("las minúsculas no son MAYÚSCULAS", 'MB_CASE_FOLD');
convertir("las minúsculas no son MAYÚSCULAS", 'MB_CASE_UPPER_SIMPLE');
convertir("las minúsculas no son MAYÚSCULAS", 'MB_CASE_LOWER_SIMPLE');
convertir("las minúsculas no son MAYÚSCULAS", 'MB_CASE_TITLE_SIMPLE');
convertir("las minúsculas no son MAYÚSCULAS", 'MB_CASE_FOLD_SIMPLE');

Me siento solo, dime algo...