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 :

Regex avec unicode [RegEx]


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Regex avec unicode
    Bonsoir,

    J'ai un petit soucis, alors je ne sais pas si je dois utiliser les regex ou non pour ce type de problème.
    J'ai un tableau de string avec dedan des caractères unicode ce qui me pose un gros soucis.
    En gros ça donne ceci : Am\u00e9lie au lieu de Amélie
    J'aimerai scanner mon talbeau prenom pour remplacer cet encodage.

    Merci!
    Dernière modification par Invité ; 21/12/2009 à 02h51.

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    La fonction chr() ne marche qu'en ASCII, donc il nous faut une fonction de conversion :

    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
    30
    31
    32
    33
    34
    35
    36
    <?php
    $str = 'Am\u00e9lie';
     
    $str = str_replace('\u00', '\x', $str);
     
    print preg_replace_callback('/\\\xe9/', 'cp2utf8', $str);
     
    function cp2utf8 ($hexcp) {
     
        $outputString = '';
     
        $n = hexdec($hexcp[0]);
     
        if ($n <= 0x7F) {
            $outputString .= chr($n);
        }
        else if ($n <= 0x7FF) {
            $outputString .= chr(0xC0 | (($n>>6) & 0x1F))
            .chr(0x80 | ($n & 0x3F));
        }
        else if ($n <= 0xFFFF) {
            $outputString .= chr(0xE0 | (($n>>12) & 0x0F))
            .chr(0x80 | (($n>>6) & 0x3F))
            .chr(0x80 | ($n & 0x3F));
        }
        else if ($n <= 0x10FFFF) {
            $outputString .= chr(0xF0 | (($n>>18) & 0x07))
            .chr(0x80 | (($n>>12) & 0x3F)).chr(0x80 | (($n>>6) & 0x3F))
            .chr(0x80 | ($n & 0x3F));
        }
        else {
            $outputString .= 'Error: ' + $n +' not recognised!';
        }
     
        return $outputString;
    }

  3. #3
    Invité
    Invité(e)
    Par défaut
    Ok merci mais j'ai fait une fonction un peu plus simple à mon goût en utilisant la librairie RPC JSON.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private function decodeUnicode($string)
    		{
    		if( preg_match_all('/\\\u[0-9A-F]{4}/i', $string, $matches) ){
    			foreach($matches[0] as $v){
    				$unicode_hexacode = $v[2] . $v[3] . $v[4] . $v[5];
    				$string =  str_replace($v, '&#' . base_convert($unicode_hexacode, 16, 10) . ';', $string);	
    			}
    		}
    		return $string;
    		}
    	}

  4. #4
    Membre Expert Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Par défaut
    Je demande si tu pouvais pas faire ça directement avec des fonctions comme html_entity_decode() ou unicode_decode().

  5. #5
    Invité
    Invité(e)
    Par défaut
    La fonction unicode_decode est expérimentale et et ne fonctionne que pour les versions PHP 6 ou supérieur hélas...
    Moi je suis sous PHP 5.3.0

    http://php.net/manual/fr/function.unicode-decode.php

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    162
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 162
    Par défaut problème
    Bonjour,

    J'ai essayé votre fonction afin d'utiliser des caractères unicode dans mes regex

    il me convertit bien en hexa..mais celà ne convertit pas certains caractères en UTF-8

    ā : ā
    ă : ă

    pourtant je fais bien un utf8_encode et html_entity_decode

    Merci d'avance

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

Discussions similaires

  1. REGEX avec variable
    Par Mat_F dans le forum Langage
    Réponses: 3
    Dernier message: 21/07/2006, 20h24
  2. Caractère avec Unicode
    Par rawanex dans le forum Langage
    Réponses: 1
    Dernier message: 14/07/2006, 16h32
  3. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 11h26
  4. [CR(10)]Problème avec unicode (japonais)
    Par speed034 dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 26/05/2005, 10h55
  5. [info] Caractere avec Unicode
    Par Skarlix dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 03/02/2005, 23h39

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