[RESOLU] réécrite de chaine de caractere, probleme d'accents

Eléphant du PHP | 299 Messages

14 juil. 2014, 00:30

Salut les amis.

j'ai un souci de réécriture , tous les accents se transforment en "n".


<?php
function rewrite($chaine){
 //les accents
 $chaine=trim($chaine);
 $chaine= strtr($chaine,"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ","aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
 //les caracètres spéciaux (aures que lettres et chiffres en fait)
 $chaine = preg_replace('/([^.a-z0-9]+)/i', '-', $chaine);
 return $chaine;
}
?>
<a href="/outils/<?php echo $actu['id']; ?>-<?php echo rewrite($actu['titre']); ?>"><?php echo $actu['titre']; ?></a>


Pourriez vous me guider svp pour trouver la solution du souci ou plutot des deux soucis?


Bien cordialement!


Merci!

Mammouth du PHP | 1339 Messages

14 juil. 2014, 12:34

Voici ma fonction perso :
	// Simplifier une chaine
	function simplification($chaineNonValide, $separator='-') {
		
		$chaineNonValide = strip_tags(html_entity_decode($chaineNonValide));	
		
		$accented = array('&','À','Á','Â','Ã','Ä','Å','Æ','Ă','Ą','Ç','Ć','Č','Œ','Ď','Đ','à','á','â','ã','ä','å','æ','ă','ą','ç','ć','č','œ','ď','đ','È','É','Ê','Ë','Ę','Ě','Ğ','Ì','Í','Î','Ï','İ','Ĺ','Ľ','Ł','è','é','ê','ë','ę','ě','ğ','ì','í','î','ï','ı','ĺ','ľ','ł','Ñ','Ń','Ň','Ò','Ó','Ô','Õ','Ö','Ø','Ő','Ŕ','Ř','Ś','Ş','Š','ñ','ń','ň','ò','ó','ô','ö','ø','ő','ŕ','ř','ś','ş','š','Ţ','Ť','Ù','Ú','Û','Ų','Ü','Ů','Ű','Ý','ß','Ź','Ż','Ž','ţ','ť','ù','ú','û','ų','ü','ů','ű','ý','ÿ','ź','ż','ž','А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я');
		$replace = array('et','A','A','A','A','A','A','AE','A','A','C','C','C','CE','D','D','a','a','a','a','a','a','ae','a','a','c','c','c','ce','d','d','E','E','E','E','E','E','G','I','I','I','I','I','L','L','L','e','e','e','e','e','e','g','i','i','i','i','i','l','l','l','N','N','N','O','O','O','O','O','O','O','R','R','S','S','S','n','n','n','o','o','o','o','o','o','r','r','s','s','s','T','T','U','U','U','U','U','U','U','Y','Y','Z','Z','Z','t','t','u','u','u','u','u','u','u','y','y','z','z','z','A','B','B','r','A','E','E','X','3','N','N','K','N','M','H','O','N','P','a','b','b','r','a','e','e','x','3','n','n','k','n','m','h','o','p','C','T','Y','O','X','U','u','W','W','b','b','b','E','O','R','c','t','y','o','x','u','u','w','w','b','b','b','e','o','r ');
		$chaineValide = str_replace($accented, $replace, $chaineNonValide);
		
		$search = array ('@[ ]@i','@[^a-zA-Z0-9_-]@');
		$replace = array ($separator, '');
		$chaineValide = preg_replace('/(?:(['.$separator.'])\1)\1*/', '$1', trim(preg_replace($search, $replace, $chaineValide), $separator));
		
	return $chaineValide;
				
	}
Ca remplace les accent, remplace tous les caractères bizarre par $separator et si il y a 2 $separator qui se suivent ca n'en met qu'un.

Tu trouveras pas mieux :)
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 299 Messages

14 juil. 2014, 15:07

Effectivement ton morceau est efficace meme si je comprend pas l'erreur du mien. Mille mercis :))))