Conversion en majuscules et en minuscules de caractères accentués en PHP (strtoupper français !)

La fonction PHP de passage en majuscules strtoupper ne convertit pas les caractères accentués en leur équivalents accentués en majuscules, ce qui est gênant en Français ! Cette fonction maison le fait. J’ai rajouté un paramètre $how_many qui permet de ne changer que les n premiers caractères, par exemple pour ne mettre en majuscule que la première lettre !

Vous verrez que j’ai mis des utf8_decode et utf8_encode car les fonctions strtoupper et strtolower de PHP 5 ne sont pas utf8-compliant… donc il faut décoder et encoder.

function strtoupper_fr($input, $how_many=null) {
	if($how_many==null) { $how_many=strlen($input); }
	$up_input=trim(strtoupper(utf8_decode($input)));
	$output='';
	for($i=0; $i<=$how_many; $i++) {
		$output.=strtr($up_input[$i], 'äâàáåãéèëêòóôõöøìíîïùúûüýñçþÿæœðø','ÄÂÀÁÅÃÉÈËÊÒÓÔÕÖØÌÍÎÏÙÚÛÜÝÑÇÞÝÆŒÐØ');
	}
	if($how_many!=strlen($input)) $output.=substr($input, $i, strlen($input));
	return (utf8_encode($output));
}

Et cette fonction passe en minuscules des caractères accentués en Français :

function strtolower_fr($input) {
	$output=trim(strtolower(utf8_decode($input)));
	$output=strtr($output, 'ÄÂÀÁÅÃÉÈËÊÒÓÔÕÖØÌÍÎÏÙÚÛÜÝÑÇÞÝÆŒÐØ', 'äâàáåãéèëêòóôõöøìíîïùúûüýñçþÿæœðø');
	return (utf8_decode($output));
}