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 :

Comparaison avec casse


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    retraité, ex chef de projets en informatique
    Inscrit en
    Juillet 2005
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité, ex chef de projets en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2005
    Messages : 602
    Par défaut Comparaison avec casse
    Bonjour,

    Y a-t-il, en PHP, une combine/astuce/fonction qui puisse me dire que les expressions suivantes ne sont pas égales ? :
    * tete et tête
    * château et chateau
    * EPERNAY et ÉPERNAY
    etc ...
    Je vous remercie.
    Bonne journée.

    Marcel Marie

  2. #2
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Aucune de ces expressions ne sont égales quand on les compare tout simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var_dump('tete' == 'tête');
    var_dump('château' == 'chateau');
    var_dump('EPERNAY' == 'ÉPERNAY');
    Tout ces tests retournent false.

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    c'est naturellement déjà le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ("tete" != "tête") {
       echo 'pas pareil';
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    En résumé, il existe bien une astuce : les comparer !

    Ceci dit, quel rapport avec le titre de la question ("comparaison avec casse") ?
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre éclairé
    Homme Profil pro
    retraité, ex chef de projets en informatique
    Inscrit en
    Juillet 2005
    Messages
    602
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité, ex chef de projets en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2005
    Messages : 602
    Par défaut
    Eh oui, plus je vieillis, plus je deviens CON ou ÉTOURDI !!!
    Je me suis mal exprimé. Il fallait lire " me dire que les expressions suivantes sont égales " ....
    * tete et tête
    * château et chateau
    * EPERNAY et ÉPERNAY

    Je voudrais justement que ce soit considéré comme égaux, sans distinction qu'il y ait majuscule ou accent
    $coma_nom= "Les Etangs";
    $com_nom = "Les Étangs";

    La comparaison que je fais, je voudrais que ça me dise que c'est EGAL :
    if ($com_nom == $coma_nom )
    devrait me dire, OUI, c'est égal ...

    Ou alors, je dis bien, "combine" pour ramener une expression en son expression équivalente sans majuscule et sans lettre accentuée ...
    Merci.
    A bientôt.
    Marcel Marie

  6. #6
    Membre Expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    // Fonction qui supprime les accents. Compliquée mais elle fonctionne sans exception
    function supprAccents($str = null, $encoding = 'UTF-8') {
        if (!is_string($str)) {
            return false;
        }
        /* transformer les caractères accentués en entités HTML */
        $str = htmlentities($str, ENT_NOQUOTES, $encoding);
     
        /* remplacer les entités HTML pour avoir juste le premier caractères non accentués 
         * Exemple : "&ecute;" => "e", "&Ecute;" => "E", "Ã " => "a" ... */
        $str = preg_replace('#&([A-za-z])(?:acute|grave|cedil|circ|orn|ring|slash|th|tilde|uml);#', '\1', $str);
     
        /* remplacer les ligatures tel que : Œ, Æ ... 
          Exemple "Å“" => "oe" */
        $str = preg_replace('#&([A-za-z]{2})(?:lig);#', '\1', $str);
        /* Supprime les espaces */
        $str = preg_replace('/\s/', '_', $str);
        /* Supprimer tout le reste */
        $str = preg_replace('#&[^;]+;#', '', $str);
     
        return $str;
    }
     
    function compare($string1,$string2) {
        return (strcasecmp(supprAccents($string1),supprAccents($string2)));
    }
     
    var_dump(compare('tete','tête')); // retourne 0 donc les deux chaînes sont équivalentes
    var_dump(compare('EPERNAY','ÉPERNAY')); //De même

  7. #7
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Au cas où ce serait pour comparer avec des données issues d'une bdd, il suffit d'indiquer l'interclassement utf8_general_ci.

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

Discussions similaires

  1. Comparaison avec BSTR
    Par Sarkou dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 17/11/2006, 15h38
  2. [Oracle] type date: comparaison avec l'année en cours
    Par zchallal dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/06/2006, 07h39
  3. comparaison avec strcmp
    Par je®ome dans le forum C
    Réponses: 9
    Dernier message: 23/05/2006, 18h09
  4. [debutant] Comparaison sans casse !
    Par Tchinkatchuk dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/04/2005, 14h50
  5. comparaison avec substring
    Par tidan dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/01/2005, 17h13

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