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 :

UTF8, problème avec preg_replace


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut UTF8, problème avec preg_replace
    Je suis passé en UTF8. J'ai converti les fichiers, les données des fichiers et supprimé le BOM des fichiers.
    Par contre pour la base de données, j'ai du utiliser mysql_query("SET NAMES 'utf8'"); faute de pouvoir convertir mes données.

    Voila la fonction qui déconne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function NomImage($nom='')
    {	$patterns=array	(	'/[\'\s]/',		'/([ä])/',		'/([ ])/',		'/([é])/',		'/([ê])/',		'/([è])/',		'/([à])/',	'/([â])/',	'/([û])/',	'/([î])/',	'/([ô])/',	'/([,])/',	'/([-])/',	'/([:])/',	'/([!])/',	'/([\'])/'
    						);
    	$replac=array		('',				'a',			'',				'e',			'e',			'e',			'a',		'a',		'u',		'i',		'o',		'',			'',			'',			'',			'\''						
    						);
     
    	$nom=preg_replace($patterns, $replac, $nom);
    	return strtolower($nom);
    }
    echo NomImage('léwàwäwïwBleur'); écrit dans un fichier UTF8 en UT8 me donne : laewawaawa�wbleur

    echo NomImage('léwàwäwïwBleur'); venant de la BDD me donne : laewawaawa

    L'ajout et l'affichage de léwàwäwïwBleur dans la bdd ne pose aucun soucis, il est enregistré et affiché correctement. C'est seulement cette fonction qui débloque.

    Pourquoi ca débloque ? Ce n'est pas l'encodage du fichier qui contient la fonction.

  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
    As-tu essayé avec le modificateur pour Unicode ? Il me semble que c'est "u", à vérifier.

  3. #3
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    Je n'ai pas trouvé d'option -u, il y a bien cette option décrite ici, mais je ne sais pas encore comment l'utiliser.

    Mais en cherchant, je suis tombé sur ca puis ca.

    Apparament, l'utf8 pose problème à la solution de base
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $str = strtr($str, 'ÁÀÂÄÃÅÇÉÈÊËÍÏÎÌÑÓÒÔÖÕÚÙÛÜÝ', 'AAAAAACEEEEEIIIINOOOOOUUUUY');
    $str = strtr($str, 'áàâäãåçéèêëíìîïñóòôöõúùûüýÿ', 'aaaaaaceeeeiiiinooooouuuuyy');
    a cause de l'encodage sur plus de 8bits (On va dire que c'est vrai).
    Le gars encode le caractère é en &eacute, puis le passe en e. C'est bourrin, mais ca fontionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
     
    function wd_remove_accents($str, $charset='utf-8')
    {
        $str = htmlentities($str, ENT_NOQUOTES, $charset);
     
        $str = preg_replace('#\&([A-za-z])(?:uml|circ|tilde|acute|grave|cedil|ring)\;#', '\1', $str);
        $str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); // pour les ligatures e.g. '&oelig;'
        $str = preg_replace('#\&[^;]+\;#', '', $str); // supprime les autres caractères
     
        return $str;
    }
     
    ?>
    Le problème avec cette solution, c'est que je ne sais pas comment supprimer les caractère comme : - ' ! ou les espaces.
    Avant il suffiait de les ajouter dans le tableau.

  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
    Pour que ton strtr fonctionne, il faut que ton script soit encodé en UTF-8 aussi.

    Pour l'option de regex, ce n'est pas -u mais plutôt /.../u

  5. #5
    Membre averti Avatar de Space Cowboy
    Homme Profil pro
    chomeur
    Inscrit en
    Avril 2005
    Messages
    496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Avril 2005
    Messages : 496
    Points : 401
    Points
    401
    Par défaut
    J'ai fini pas trouver la syntaxe du u, mais ca ne change rien.
    Tout est en UTF8.

Discussions similaires

  1. [RegEx] problème avec preg_replace
    Par mike_chti dans le forum Langage
    Réponses: 2
    Dernier message: 29/09/2008, 17h12
  2. GTK et UTF8 : Problème avec la fonction get_locale_from_utf8
    Par hubux dans le forum GTK+ avec C & C++
    Réponses: 4
    Dernier message: 19/04/2007, 17h16
  3. [RegEx] Problème avec preg_replace
    Par Vinzius dans le forum Langage
    Réponses: 6
    Dernier message: 27/05/2006, 23h10
  4. [RegEx] Problème avec preg_replace
    Par Vinzius dans le forum Langage
    Réponses: 4
    Dernier message: 08/05/2006, 01h06
  5. [RegEx] problème avec preg_replace
    Par carlos20 dans le forum Langage
    Réponses: 6
    Dernier message: 27/10/2005, 10h29

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