REmplacement de caractères

Fermé
madmaskx Messages postés 129 Date d'inscription jeudi 27 décembre 2007 Statut Membre Dernière intervention 15 mai 2014 - 4 juin 2013 à 14:46
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 4 juin 2013 à 15:28
Bonjour,
J'ai un soucis pour transformer mes caractères spéciaux. J'ai trouvé la fonction suivante sur le net

function filter($str) {
	$entree = array('#[áàâäã]#','#[ÁÀÂÄÃ]#','#[éèêë]#','#[ÉÈÊË]#','#[íìîï]#','#[ÍÌÎÏ]#','#[óòôöõ]#','#[ÓÒÔÖÕ]#','#[úùûü]#','#[ÚÙÛÜ]#','#ÿ#','#Y#','#ç#','#Ç#','# #','#[^a-zA-Z0-9_-]#');
	$sortie = array('a','A','e','E','i','I','o','O','u','U','y','Y','c','C','_' ,'');
	return preg_replace($entree,$sortie,$str);
}


que j'utilise dans cette boucle :
for ($i=0;$i<$tab_length;$i++){ 
	echo "<p>";
	#echo $i;
	#echo " : ";
	foreach ($donnees[$i] as $value){ 		                  
		
		$value=strtolower($value);
		$value=filter($value);              #<- ICI
		echo $value;
		echo " ";
		#exit();
	}
	#exit();
	echo "</p>";
}


Aucune erreur ne m'est renvoyée et la boucle fait son job. Sauf que la fonction filter ne fais que supprimer les caractères indésirables, elle ne les remplace pas. En gros elle ne remplace que le dernier groupe des 2 variables, c.a.d. tout ce qu'on a pas remplacé jusque là par rien. Je donne le lien pour une explication plus complète de la fonction :
http://www.wikistuce.info/doku.php/php/supprimer_tous_les_caracteres_speciaux_d-une_chaine
La fonction n'est pas la première présentée mais une variante trouvée plus bas (avec exactement les mêmes effets)

J'ai lu que les fonction de remplacement de caractères avaient un peu de mal avec utf-8 mais mon document et ma DB sont en ISO 8859-1 (latin-1).

Quelqu'un a une idée ?

Merci d'avance.

A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
4 juin 2013 à 15:28
Salut madmaskx,

Tu pourrais t'inspirer de la contribution de Daniel Loureiro à la page de manuel de la fonction Php str_replace :

https://www.php.net/manual/en/function.str-replace.php#111694

ou alors te passer de tout ce bazar, et utiliser iconv, pour faire de la translitération, ce qui va marcher même sur le caractères auxquels tu ne pense pas (si ton serveur Php est compilé avec le support de iconv) en convertissant de ta source ISO-8859-1 vers ascii.

https://www.php.net/manual/en/function.iconv.php

Cela ne va pas supprimer les accents, mais essayer de les transformer en quelque chose qui existe en ascii.

Par exemple : $value = "une phrase accentuée"; donnera "une phrase accentu'ee".

<?php

$value = "une phrase accentuée";

echo "<p>value (orig) = $value</p>";

$value = iconv("ISO-8859-1", "ascii//TRANSLIT", $value);

echo "<p>value (trans) = $value</p>";


?>


Dal
0