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 :

:alpha: ne reconnait pas les accents ? [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut :alpha: ne reconnait pas les accents ?
    Bonjour tous,
    je me heurte à un problème de reconnaissance de caractère spécial.
    Mon code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $t = '1 séquence 2';
    preg_match("/(?<c>\d{0,1})(\W*)(?<m>[[:alpha:]]+)(\W*)(?<b>\d{0,3})/i", $t, $regs);
    print_r($regs);
    mais au lieu de me mettre 'séquence' dans la variable $m, il met que 's' et met le 'é' dans le masque d'après correspondant à "tout sauf chiffres et lettres" !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array ( [0] => 1[c] => 1 [1] => 1 [2] => [m] => s [3] => s [4] => é [b] => [5] => )
    mes pages sont en ISO-8859-1.
    Auriez-vous une idée pour régler ce problème ?

    Merci

  2. #2
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut
    en fait je reçois la variable par formulaire, envoyée par get ou post ou bien écrit direct dans le script ne change rien.

    Passer $t par urldecode, html_entity_decode ou htmlspecialchars_decode ne change rien.

    Et changer
    [[:alpha:]] par [a-zàáâãäçèéêëìíîïñòóôõöùúûü]
    ne change rien parce que si le caractère accentué est le premier, il se retrouve dans $regs[2] (le 1er \W*)

  3. #3
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut
    en attendant votre aide je cherche toujours...
    J'ai lu qu'il fallait le bon jeu de caractère. La page est déjà envoyée en ISO-8859-1 mais j'ai quand même ajouté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_ALL, 'fr_FR.ISO-8859-1');
    ou fr_FR tout seul, mais ça ne fonctionne pas non plus.

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    utilise l'option u
    en pcre la classe :alpha: c'est \p{Xan}


    ps : ton option i est inutile

  5. #5
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut

    OK CA MARCHE !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setlocale(LC_CTYPE, 'fra_FRA');
    Une fois la ligne mise lancée dans un fichier, PHP garde le paramètre pour toute la session.
    fr-FR, fr_FR, ISO-8859-1... tout ça ne marche pas chez moi, par contre chez mon hébergeur canadien, fra_FRA ne marche pas, il faut fr_FR

    Si on décommente
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    default_charset = "iso-8859-1"
    dans php.ini ça ne résout pas le problème.
    Pourtant tout est en 'fr' et en iso-8859-1 dans la config !

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    faillait juste utiliser l'option u, pas besoin de bidouiller avec les locales et le charset

  7. #7
    Membre confirmé
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2010
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2010
    Messages : 153
    Par défaut
    J'avais mis i parce qu'à un moment donné j'avais remplacé :alpha: par a-zéèàç... et je l'ai enlevé, merci.

    J'ai remplacé le :alpha: par \p{Xan} mais chez mon hébergeur (PHP 5.2.9) j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: preg_match() [function.preg-match]: Compilation failed: unknown property name after \P or \p at offset 35 in...
    L'option u ne trouve rien dès que j'ai des accents en utilisant :alpha:, \p{Xan} ou \w.

    Le problème est que la parenthèse capturante (\W*) avant la parenthèse pour mon mot capte la 1ere lettre du mot si elle est accentuée. Par exemple chercher '1 ézékiel 2' donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reg[2] = ' é' et $reg[m]=zékiel
    avec \p{Xan} et rien avec \w.
    Y a-t-il une solution pour retirer les accents de la 1ère (\W*) ?

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    laisse tombé pour le Xan c'est qu'a une ancienne version de PCRE (même si ça m’étonne un peu)

    ton code est bien en utf-8 ?

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 24/11/2006, 12h21
  2. Combo ne reconnait pas les DVD
    Par mohamed amine dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 15/11/2006, 20h59
  3. Ne reconnait pas les drivers Oracle
    Par zuzuu dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 17/07/2006, 11h05
  4. Mon compilo ne reconnait pas les UINT8
    Par baert dans le forum C++
    Réponses: 11
    Dernier message: 08/02/2006, 16h08
  5. [Debutant(e)]StreamTokenizer: ne reconnait pas les floats!!
    Par doudine dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 10/12/2004, 17h28

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