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_encode avec eregi_replace


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut utf8_encode avec eregi_replace
    Bonjour,

    Je veux afficher par exemple cette phase "Plasma coin carré" au lieu de la phase complète "Test de la télé Plasma coin carré", en supprimant grâce au code le bout de phrase "Test de la télé".

    Voici le code que j'ai mis en place. Il fonction très bien par exemple pour la phrase "Console de salon" au lieu de "Test de la nouvelle Console de salon".

    Mais c'est le "é" de télé qui n'est pas reconnu dans le code et du coup il affiche la phrase complète au lieu de la phrase raccourcie. Quelqu'un peut m'aider à corriger ce code , merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo utf8_encode(eregi_replace("test de la télé|test de la nouvelle","",$list_video[titre])); ?>

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    str_replace suffit pour ce que tu fais.
    les fonctions eregi sont de plus obsolète.
    et travaille directement dans le bon encodage plutôt que d'encoder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $cherche = array('test de la télé', 'test de la nouvelle');
    $replace = '';
    echo str_replace($cherche, $replace, $list_video['titre']);

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    ça ne fonctionne pas.. Dans la base de donnée le titre est en latin1_swedish_ci. Me conseilles tu de la passer en UTF8 ?

  4. #4
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    alors j'ai sélectionné UTF8_general_ci pour la table en question depuis Mysql mais ça n'a pas l'air d'avoir changé grand chose.

    Sinon pour l instant comme je sais pas comment intégrer ton code modifié, j'avais besoin de faire apparaitre les titres en majuscules sans les accents pour faire apparaitre genre "TEST DE LA TELE PLASMA COIN CARRE"

    Alors voici ou j'en suis du code mais dans le cas présent il affiche quand même "TEST DE LA TELE" au lieu de l enlever de la phrase, toujours à cause de ces accents.

    A partir de mon code peux tu m aider à reformuler correctement pour intégrer ton code ? merci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <h3 href="<?php echo link_video($list_video['video_id']); ?>" title="<?php echo utf8_encode($list_video['titre']); ?>">
    <?php
    echo strtoupper(remplace_accents(utf8_encode(eregi_replace("test de la télé|test des télés|test de la console","",$list_video[titre])))); ?><br />
    </h3>

  5. #5
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il faut déjà que tu règles ton encodage :
    http://j-willette.developpez.com/tut...-site-en-utf8/

    pour UTF8 la fonction est mb_strtoupper()

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    je vois que pour changer en utf8 il faut exécuter ce script:
    "ALTER TABLE videos CHANGE titre CHARACTER SET utf8 COLLATE interclassement" car c est la colonne "titre" que je veux modifier en utf8 et pas toute la table "videos". Mais ça ne fonctionne pas; il indique une erreur de syntaxe au moment d'exécuter.

  7. #7
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ne travaille pas avec plusieurs encodage.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    Me conseilles tu alors alors de modifier toute la table ? Du coup pourquoi ce code ne marche pas ? "ALTER TABLE videos CHANGE titre CHARACTER SET utf8 COLLATE interclassement"

    Dans ton lien ils indiquent ce code
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `ma_table` CHANGE `mon_champ` `mon_champ` VARCHAR( 50 ) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;
    mais j'ai des Varchar (250) aussi dans certaines colonnes.

    J'ai peur de faire une bêtise, que me conseilles tu ? Merci

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Si tu n'es pas certain du code de la requête, essaies plutôt de modifier l'interclassement avec "phpMyadmin"

  10. #10
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    C'est ce que j'ai fais, j'ai choisi simplement UTF8 dans la liste déroulante et il affiche bien dans la table l'interclassement utf8. Mais si dans mon code j'enlève le utf8_encode, je me retrouve encore avec le mot "p?le" au lieu du mot "pédale" et la première partie de la phrase "Test de la pédale" n'est toujours pas retiré. Je tourne en rond...

  11. #11
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il n'y a pas que l'interclassement dans l'article que je t'ai donné.
    Est-ce que tu as bien tout fait ?

  12. #12
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    1. dans le head il y a bien <meta http-equiv="content-type" content="text/html; charset=utf-8" /> et quand on fait code source de la page, on voit bien la ligne citée

    2. Dans notepad+, je suis bien en format UTF8 sans bom

    3. Dans phpMyadmin, j'ai juste eu à sélectionner UTF8_general_ci dans la liste déroulante proposée pour la colonne concernée "titre". Je n ai rien fait d'autre.
    (mais a t il bien modifié les titres déjà entrés dans la bdd ou applique t il l'utf8 pour les prochains titres ?)

  13. #13
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Il manque la partie "V-B. A la connexion" (qui est essentielle)

  14. #14
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    ok, j'ai trouvé où placer mysql_set_charset( 'utf8' ); directement après le mysql_connect dans les fonctions globales du site. Du coup je vais enlever tous les utf8_encode de mes codes, puisque cette fois c'est tout le site qui est passé en utf8.

    J'en apprends tous les jours...mais avec un peu d'aide quand même. Je vous retrouve sur d'autres postes, j'ai encore plein de questions à poser.
    Merci à tous

  15. #15
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    juste une dernière question, comment modifier cette fonction puisque maintenant les titres sont maintenant directement en UTF8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function remplace_accents($texte) {
    return utf8_encode(strtr(utf8_decode($texte),utf8_decode('ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËéèêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ'),'aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn'));
    	}

  16. #16
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    Par défaut
    N'utilises plus "utf8_encode/utf8_decode" et utilise "str_replace" à la place de "strtr"

  17. #17
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Sinon au niveau du passage à l'utf-8, selon ta liste :

    - Entête html ok
    - Configuration notepad ok
    - Configuration interclassement bdd ok
    - Configuration connexion bdd ok

    Il te manque la configuration du serveur. Par défaut il envoie encore souvent de l'iso. Et l'entête du serveur prend le pas sur l'entête html. Il est donc important de le configurer pour utf-8. Trois solutions possibles :
    - soit configurer Apache avec "AddDefaultCharset utf-8"
    - soit mettre "AddDefaultCharset utf-8" dans un .htaccess placé à la racine du serveur
    - soit écrire l'entête : header( 'content-type: text/html; charset=utf-8' );
    en haut de ton code php.
    (correspond au paragraphe IV du tuto indiqué par sabotage)

  18. #18
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2012
    Messages : 170
    Points : 43
    Points
    43
    Par défaut
    Bon je crois que je suis bon partout cette fois sur cette question utf8. J'ai modifié chaque point comme vous me l avez précisé.

    De plus j'ai utilisé la fonction mb_strtoupper ce qui me permet d'avoir les accents sur les majuscules.

    J'ai compris comment tout cela fonctionne, merci beacoup. On se voit sur d'autres prochains post

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

Discussions similaires

  1. problème avec eregi_replace
    Par Yoshio dans le forum Langage
    Réponses: 7
    Dernier message: 05/02/2006, 00h51
  2. [RegEx] Probleme avec eregi_replace
    Par silouane dans le forum Langage
    Réponses: 2
    Dernier message: 03/02/2006, 09h21
  3. [Tableaux] Problème avec utf8_encode()
    Par RapidJul dans le forum Langage
    Réponses: 1
    Dernier message: 12/10/2005, 18h22
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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