8792 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai fais une fonction qui permet de dénuer une chaine de ses caractères spéciaux et autres caractères nuisibles lorsque l'on veut ajouter cette chaine dans une url.

Le problème c'est que ma fonction est vraiment longue et je me demande s'il existe un autre moyen (avec les expressions régulières par exemple) de raccourcir celle-ci :

function cleanStrForUrl($str)
{
	$str = trim($str);
	
	$str = str_replace(' ', '_', $str);
	$str = str_replace('\'', '_', $str);
	$str = str_replace('-', '_', $str);
	$str = str_replace('&', 'et', $str);
	
	$str = str_replace('Á', 'a', $str);
	$str = str_replace('á', 'a', $str);
	$str = str_replace('Â', 'a', $str);
	$str = str_replace('â', 'a', $str);
	$str = str_replace('Æ', 'ae', $str);
	$str = str_replace('æ', 'ae', $str);
	$str = str_replace('À', 'a', $str);
	$str = str_replace('à', 'a', $str);
	$str = str_replace('Å', 'a', $str);
	$str = str_replace('å', 'a', $str);
	$str = str_replace('Ã', 'a', $str);
	$str = str_replace('ã', 'a', $str);
	$str = str_replace('Ä', 'a', $str);
	$str = str_replace('ä', 'a', $str);

	$str = str_replace('Ç', 'c', $str);
	$str = str_replace('ç', 'c', $str);

	$str = str_replace('É', 'e', $str);
	$str = str_replace('é', 'e', $str);
	$str = str_replace('Ê', 'e', $str);
	$str = str_replace('ê', 'e', $str);
	$str = str_replace('È', 'e', $str);
	$str = str_replace('è', 'e', $str);
	$str = str_replace('Ë', 'e', $str);
	$str = str_replace('ë', 'e', $str);
	$str = str_replace('€', 'e', $str);
	
	$str = str_replace('Í', 'i', $str);
	$str = str_replace('í', 'i', $str);
	$str = str_replace('Î', 'i', $str);
	$str = str_replace('î', 'i', $str);
	$str = str_replace('¡', 'i', $str);
	$str = str_replace('Ì', 'i', $str);
	$str = str_replace('ì', 'i', $str);
	$str = str_replace('Ï', 'i', $str);
	$str = str_replace('ï', 'i', $str);
	
	$str = str_replace('Ñ', 'n', $str);
	$str = str_replace('ñ', 'n', $str);
	
	$str = str_replace('Ó', 'o', $str);
	$str = str_replace('ó', 'o', $str);
	$str = str_replace('Ô', 'o', $str);
	$str = str_replace('ô', 'o', $str);
	$str = str_replace('Œ', 'oe', $str);
	$str = str_replace('œ', 'oe', $str);
	$str = str_replace('Ò', 'o', $str);
	$str = str_replace('ò', 'o', $str);
	$str = str_replace('Õ', 'o', $str);
	$str = str_replace('õ', 'o', $str);
	$str = str_replace('Ö', 'o', $str);
	$str = str_replace('ö', 'o', $str);
	
	$str = str_replace('Š', 's', $str);
	$str = str_replace('š', 's', $str);
	
	$str = str_replace('Ú', 'u', $str);
	$str = str_replace('ú', 'u', $str);
	$str = str_replace('Û', 'u', $str);
	$str = str_replace('û', 'u', $str);
	$str = str_replace('Ù', 'u', $str);
	$str = str_replace('ù', 'u', $str);
	$str = str_replace('Ü', 'u', $str);
	$str = str_replace('ü', 'u', $str);
	
	$str = str_replace('Ý', 'y', $str);
	$str = str_replace('ý', 'y', $str);
	$str = str_replace('Ÿ', 'y', $str);
	$str = str_replace('ÿ', 'y', $str);
		
	$str = strtolower($str);
	
	$len = strlen($str);
	
	for ($i = 0; $i < $len; $i++)
	{
		if (!ereg('[-_0-9a-z]+', $str{$i}))
		{
			$str = str_replace($str{$i}, '', $str);
			
			$len = strlen($str);
		}
	}

	
	while(!ereg('[0-9a-z]+', $str{0}))
	{
		$str = substr($str, 1, $len);
	} 

	$len = strlen($str);
	
	while(!ereg('[0-9a-z]+', $str{$len-1}))
	{
		$str = substr($str, 0, $len-1);
		
		$len = strlen($str);
	}
	
	$str = str_replace('__', '_', $str);
	
	return $str;
}


Merci à vous.
Bonjour,

Je me permets de te rapeller quele Forum est spécialisé dans les Standars du Web...
Et pas particulièrement dans le php. Smiley sweatdrop
Je déplace donc ton sujet dans le Salon le plus approprié et te conseille vivement de cibler un Forum un peu plus adapté... Smiley cligne

Nota : pour ton information, on peut aussi écrire ceci... Smiley murf
	$filename=strtr($filename,'ÀÁÂÃÄÅàáâãäå','aaaaaaaaaaaa');
Tu peux déjà commencer par regrouper tous tes str_replace en un seul, ça t'aidera déjà pour la lisibilité :
$str = str_replace(array(...), array(...), $str);
Voici la fonction que tu recherches :

function RemoveAccents($string)	{    
	$string= strtr($string,    
	"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ",   
	"aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
	return $string;    
}


Tu peux ajouter commme tu le souhaites ...