TUTOS.EU

Retirer les accents d'une chaine de caractères en PHP

Comment retirer les accents en PHP

Le code. str_replace ne pose pas de problème en utf-8 alors que strtr oui

<?php
	$search  = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ');
	$replace = array('A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y');
	$MaChaine = str_replace($search, $replace, $MaChaine);
?>
Lien vers le fichier : cliquez ici Copier le code

On peut très bien en faire une fonction :

<!DOCTYPE html>
<HTML>

	<?php
		$varMachaine = "Et voici une suite de caractères avec accents : ÀÁÂÃÄÅ Ç ÈÉÊË ÌÍÎÏ ÒÓÔÕÖ ÙÚÛÜ Ý àáâãäå ç èéêë ìíîï ðòóôõö ùúûü ýÿ";
		echo "Ma chaîne sans modification : ".$varMachaine."<br />\n";		
		echo "Ma chaîne avec modification : ".fctRetirerAccents($varMachaine)."<br />\n";

		function fctRetirerAccents($varMaChaine)
		{
			$search  = array('À', 'Á', 'Â', 'Ã', 'Ä', 'Å', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', 'à', 'á', 'â', 'ã', 'ä', 'å', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ð', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ');
			//Préférez str_replace à strtr car strtr travaille directement sur les octets, ce qui pose problème en UTF-8
			$replace = array('A', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', 'a', 'a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y');

			$varMaChaine = str_replace($search, $replace, $varMaChaine);
			return $varMaChaine; //On retourne le résultat
		}
		
	?>

</HTML>
Lien vers le fichier : cliquez ici Copier le code

Voici ce que la page va afficher :

Ma chaîne sans modification : Et voici une suite de caractères avec accents : ÀÁÂÃÄÅ Ç ÈÉÊË ÌÍÎÏ ÒÓÔÕÖ ÙÚÛÜ Ý àáâãäå ç èéêë ìíîï ðòóôõö ùúûü ýÿ

Ma chaîne avec modification : Et voici une suite de caracteres avec accents : AAAAAA C EEEE IIII OOOOO UUUU Y aaaaaa c eeee iiii oooooo uuuu yy

J'ai vu une version simplifiée mais elle ne fonctionne pas en l'état. Les caractères ne sont pas remplacés :

$UneValeur = str_replace('ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy', $UneValeur);
Lien vers le fichier : cliquez ici Copier le code

Sur ce site j'ai vu une solution que je trouve moins élégante
http://www.weirdog.com/blog/php/supprimer-les-accents-des-caracteres-accentues.html

$MaVariable = htmlentities($MaVariable, ENT_NOQUOTES, 'utf-8');
$MaVariable = preg_replace('#&([A-za-z])(?:acute|cedil|caron|circ|grave|orn|ring|slash|th|tilde|uml);#', '\1', $MaVariable);
$MaVariable = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $MaVariable); // pour les ligatures e.g. 'œ'
$MaVariable = preg_replace('#&[^;]+;#', '', $MaVariable); // supprime les autres caractères
Lien vers le fichier : cliquez ici Copier le code

Pages Web

Site WebDescription
developpez.netForum où l'on indique qu'il faut remplacer strtr par str_replace

Article(s) précédent(s)

2