Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/04/2008, 11h41   #1
Membre régulier
 
Inscription : septembre 2006
Messages : 146
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : septembre 2006
Messages : 146
Points : 87
Points : 87
Par défaut Remplacement de caractères accentués et spéciaux

Bonjour,

Je me suis fait une petit fonction pour remplacer tout les accents et caractères spéciaux d'une chaine, ainsi que les espaces et autre spécialités.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
function FormatterChaine($strChaine) {
	$strChaine = strtolower($strChaine);
	$strChaine = html_entity_decode($strChaine, ENT_QUOTES, 'UTF-8');
 
	$t_Search = array('|[éèêë]|i','|[àâä]|i','|[îï]|i','|[ûùü]|i','|[ôö]|i','|[ç]|i','|[^a-zA-Z0-9]|');
	$t_Replace = array('e','a','i','u','o','c','-');
	$strChaine = preg_replace($t_Search, $t_Replace, $strChaine);	
 
	$strChaine = preg_replace('|-+|', '-', $strChaine);	
 
	return $strChaine;
}
Seulement elle ne fonctionne pas exactement comme je le voudrais. En effet, à chaque fois qu'il remplace un accent, il ajoute un "e" juste avant, soit le premier élément de mon tableau $t_Replace.

Par exemple "Tir à l’arc" devient "tir-ea-l-arc" au lieu de "tir-a-l-arc".
"Déjà" devient "deejea" au lieu de "deja".

D'où peut venir ce problème ?

Et au passage si vous avez des propositions pour améliorer la fonction, c'est avec grand plaisir que je les reçoit.
__________________
Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...
Bloodscalp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 12h30   #2
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605


Essaie ceci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
function FormatterChaine($strChaine) {
	$strChaine = strtolower($strChaine);
	$strChaine = html_entity_decode($strChaine, ENT_QUOTES, 'UTF-8');
 
	$strChaine = strtr($strChaine, 'éèêëàâäîïûùüôöç', 'eeeeaaaiiuuuooc');
	$t_Search = array('|[^a-zA-Z0-9]|');
	$t_Replace = array('-');
	$strChaine = preg_replace($t_Search, $t_Replace, $strChaine);	
 
	$strChaine = preg_replace('|-+|', '-', $strChaine);	
 
	return $strChaine;
}
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 14h58   #3
Membre régulier
 
Inscription : septembre 2006
Messages : 146
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : septembre 2006
Messages : 146
Points : 87
Points : 87
Hello et merci pour ta réponse.

Il y a le même problème avec ton code, sauf que cette fois c'est un "c" qui est ajouté, soit le dernier caractère de ta chaine de remplacement...
__________________
Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...
Bloodscalp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 16h37   #4
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605
si tu fais ceci :
Code :
1
2
3
4
5
6
7
8
function FormatterChaine($strChaine) {
	$strChaine = strtolower($strChaine);
	$strChaine = html_entity_decode($strChaine, ENT_QUOTES, 'UTF-8');
 
	$strChaine = strtr($strChaine, 'éèêëàâäîïûùüôöç', 'eeeeaaaiiuuuooc');
 
	return $strChaine;
}
Le problème y est toujours ?
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 16h44   #5
Membre régulier
 
Inscription : septembre 2006
Messages : 146
Détails du profil
Informations personnelles :
Localisation : Suisse

Informations forums :
Inscription : septembre 2006
Messages : 146
Points : 87
Points : 87
Toujours le même problème...
__________________
Il y a 10 types de personnes, celles qui connaissent le binaire, et les autres...
Bloodscalp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/04/2008, 17h01   #6
Expert Confirmé
 
Avatar de trotters213
 
Inscription : janvier 2005
Messages : 2 572
Détails du profil
Informations personnelles :
Âge : 26
Localisation : France, Gard (Languedoc Roussillon)

Informations forums :
Inscription : janvier 2005
Messages : 2 572
Points : 2 605
Points : 2 605
Tu devrais faire un echo de $strChaine après
Code :
$strChaine = html_entity_decode($strChaine, ENT_QUOTES, 'UTF-8');
car tu dois avoir un problème lors du décodage (voir même avant).
__________________
Pensez au tag
Les règles du Forum

Dev. Web : FAQ (X)HTML/CSS | Tutos (X)HTML | Tutos CSS

PHP : FAQ PHP | Tutos PHP | Benchmark PHP 5

SQL : Cours SQL
trotters213 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h16.


 
 
 
 
Partenaires

Hébergement Web