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 07/09/2006, 16h43   #1
Invité de passage
 
Inscription : juillet 2004
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 9
Points : 3
Points : 3
Envoyer un message via MSN à benohit
Par défaut Remplacement des accents avec une regex

bonjour !
Je galère actuellement pour construire un motif qui remplace un caractère accentué grâce aux htmlentities par la lettre unicode :
exemple :
chaine de départ : "côté cuisine"
doit devenir : cote cuisine

conversion htmlentities : côté cuisine
en effet, le caractère suivant le & est la lettre à garder
je dois donc isoler les motifs ô et é
et les remplacer par le deuxieme caractere de ces motifs...

et je me perds entre les fonctions php : substr, strchr, preg_match...
Merci d'avance
benohit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2006, 17h34   #2
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Salut

Il existe une fonction inverse de htmlentities(). Son nom se trouve dans la documentation de cette même fonction
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2006, 17h51   #3
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

L'expression régulière suivante devrait faire ce que tu veux :
Code :
1
2
3
4
$str = preg_replace('/&(.)(.*?);/', '$1', $str);
 
côté => cote
CÔTÉ => COTE
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2006, 17h58   #4
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Taum : ce que tu proposes ne fonctionnera pas pour la cédille par exemple, ainsi qu'un bon nombre d'autres entités HTML. La seule solution viable est d'utiliser la fonction tel que je l'ai proposé ci-dessus. De plus, c'est largement plus rapide à exécuter.
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2006, 18h00   #5
Invité de passage
 
Inscription : juillet 2004
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 9
Points : 3
Points : 3
Envoyer un message via MSN à benohit
Par défaut remplacement caractères accentués

Je crois que je me suis mal exprimé, ...
J'ai effectivement essayé la fonction html_entity_decode, mais elle ne survient pas à mes besoins :
je veux remplacer les ê é è à â û ô î ï ...
par e, a , u , o , i...
Or, j'ai remarqué que en utilisant un premier filtre à la chaîne de caractères, la lettre voulue est celle suivant le "&",
donc je cherche à scanner une chaîne passée à htmlentities, à la recherche des :
un "&" puis n'importe quelle lettre puis un ";"
pour chacune de ces occurences, prendre le deuxième caractère...
bon je vais essayer de faire des boucles avec des tableaux et des substr et des strchr et compagnie sinon...
benohit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2006, 18h07   #6
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
Je pense que le plus efficace et surtout le plus simple à maintenir est quelque chose comme :
Code :
1
2
3
4
5
$search  = 'çñÄÂÀÁäâàáËÊÈÉéèëêÏÎÌÍïîìíÖÔÒÓöôòóÜÛÙÚüûùúµ';
$replace = 'cnaaaaaaaeeeeeeeeeiiiiiiiioooooooouuuuuuuuu';
 
$string = html_entity_decode($string);
$string = strtr($string, $search, $replace);
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2006, 18h11   #7
Invité de passage
 
Inscription : juillet 2004
Messages : 9
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 9
Points : 3
Points : 3
Envoyer un message via MSN à benohit
Citation:
Envoyé par Yogui
Taum : ce que tu proposes ne fonctionnera pas pour la cédille par exemple, ainsi qu'un bon nombre d'autres entités HTML. La seule solution viable est d'utiliser la fonction tel que je l'ai proposé ci-dessus. De plus, c'est largement plus rapide à exécuter.
Si ça fonctionne justement !
voilà le code pour tester :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form action="<?php echo $_SERVER[SCRIPT_NAME]?>" method="post" enctype="multipart/form-data">
	<p>
		<label>chaîne de caractères à  coder</label>
		<input type="text" name="texte_a_coder" />
		<input type="submit" name="ok" value="=>" />	
	</p>
</form>
<?php
	if (isset($_POST))
	{
		$txt=$_POST["texte_a_coder"];
		$code=htmlentities("$txt");
		echo "<p>".$code."=>"; 
		echo preg_replace('/&(.)(.*?);/', '$1', $code)."</p>";	
	}
?>

merci Taum !!!
benohit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2006, 18h20   #8
Rédacteur
 
Avatar de Yogui
 
Homme Guillaume Rossolini
Directeur technique
Inscription : février 2004
Messages : 13 720
Détails du profil
Informations personnelles :
Nom : Homme Guillaume Rossolini
Localisation : France

Informations professionnelles :
Activité : Directeur technique

Informations forums :
Inscription : février 2004
Messages : 13 720
Points : 17 355
Points : 17 355
En ce cas, voici une expression plus efficace :
__________________
Mes articles - Zend Certified Engineer (PHP + Zend Framework)
Ressources PHP - Ressources Zend Framework
Yogui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h34.


 
 
 
 
Partenaires

Hébergement Web