IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Remplacement des accents avec une regex [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 7
    Points
    7
    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

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Il existe une fonction inverse de htmlentities(). Son nom se trouve dans la documentation de cette même fonction

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Salut,

    L'expression régulière suivante devrait faire ce que tu veux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $str = preg_replace('/&(.)(.*?);/', '$1', $str);
     
    côté => cote
    CÔTÉ => COTE

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    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.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 7
    Points
    7
    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...

  6. #6
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je pense que le plus efficace et surtout le plus simple à maintenir est quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $search  = 'çñÄÂÀÁäâàáËÊÈÉéèëêÏÎÌÍïîìíÖÔÒÓöôòóÜÛÙÚüûùúµ';
    $replace = 'cnaaaaaaaeeeeeeeeeiiiiiiiioooooooouuuuuuuuu';
     
    $string = html_entity_decode($string);
    $string = strtr($string, $search, $replace);

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !!!

  8. #8
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    En ce cas, voici une expression plus efficace :

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. remplacement d'une chaine avec une regex
    Par superkiller dans le forum C#
    Réponses: 3
    Dernier message: 15/07/2013, 11h16
  2. [RegEx] Trouver des mots clés avec une regex
    Par gene69 dans le forum Langage
    Réponses: 7
    Dernier message: 19/07/2011, 10h59
  3. Réponses: 2
    Dernier message: 26/02/2007, 15h07
  4. [Configuration] probleme avec le remplacement des accents
    Par xtaze dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 12
    Dernier message: 17/12/2005, 19h16
  5. Récupération des paramètres avec une procedure stockée
    Par samlerouge dans le forum Bases de données
    Réponses: 2
    Dernier message: 31/03/2004, 22h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo