Fonction d'encodage utf8 incompréhensible

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par bigs32, 4 Juillet 2008.

Tags:
  1. bigs32
    bigs32 WRInaute occasionnel
    Inscrit:
    8 Mai 2006
    Messages:
    438
    J'aime reçus:
    0
    bonjour
    je me suis pris la tete , mais je ne comprends toujours pas que font concretement ces 2 fonctions
    que j'ai trouvé sur
    http://fr.php.net/utf8-decode
    si une bete en développement passe par là .il pourrait m'expliquer un peu avec un exemple concrete ,ce serait super génial.

    merci
     
  2. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Comme son nom l'indique (et comme indiqué sur la page où tu l'as trouvée), cette fonction décode l'UTF-8 en ISO-8859-15 (Latin-9) au lieu de ISO-8859-1 (Latin-1). Il y a quelques caractères peu usités qui ont été remplacés par d'autres qui manquaient. Pour la France ce sont essentiellement les "oe" et "OE", le "y majuscule tréma", et surtout le symbole euro.

    Ceci dit, ce n'est pas très fûté de mettre des caractères comme ça en litéral, il ferait mieux d'utiliser des séquences de type \xnn ou des chr(n), parce qu'avant que tu arrives à copier-coller tout ça "correctement" tu as du boulot...

    Jacques.
     
  3. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 163
    J'aime reçus:
    338
    Si ça peut t'aider, voici une fonction qui converti de ISO-8859-1 vers UTF-8. Sans les caractères "hardcodés", via la fonction mb_convert_encoding() ou iconv():

    Code:
    function convertIso8859ToUtf8($string){
    	if(function_exists('mb_convert_encoding')){
    		return mb_convert_encoding($string, "UTF-8", "ISO-8859-1");
    	}
    	elseif(function_exists('iconv')){
    		return iconv("ISO-8859-1","UTF-8",$string);
    	}
    	else{
    		die("mb_convert_encoding or iconv lib isn't available");
    	}
    }
    
     
  4. bigs32
    bigs32 WRInaute occasionnel
    Inscrit:
    8 Mai 2006
    Messages:
    438
    J'aime reçus:
    0
    merci
    en fait ce que je comprends pas c'est l'analyse de mes codes
    ca veut dire koi ca !!
     
  5. Tilt
    Tilt WRInaute impliqué
    Inscrit:
    26 Mars 2005
    Messages:
    752
    J'aime reçus:
    0
    En fait ça ne veut rien dire !! Les "?" sont dûs à un problème d'encodage (ils remplacent des symboles non-reconnus).
     
  6. bigs32
    bigs32 WRInaute occasionnel
    Inscrit:
    8 Mai 2006
    Messages:
    438
    J'aime reçus:
    0
    ah ok .du coup on risque de se retrouver avec plein de ?.s'il n'arrive pas à convertir
     
  7. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Sans les caractères "hardcodés", il suffit d'utiliser utf8_decode ou utf8_encode si on traite de l'ISO-8859-1 (c'est facile, les 256 premiers caractères de la norme Unicode sont exactement les mêmes que ceux d'ISO-8859-1!).

    La fonction ci-dessus est par contre utile, à condition de la modifier légèrement, si on utilise un autre jeu de caractère qu'ISO-8859-1.

    Ceci dit, il est utile de rappeler que le but du jeu c'est de tout convertir en UTF-8, et que la compatibilité avec les autres encodages ne devrait être utilisée que pour lire des fichiers à ces formats (donc en se fiant à l'information "charset" fournie avec, autant que possible).

    Jacques.
     
  8. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    A la base, ça veut dire qu'il va replacer les 8 caractères qui ont changé par leur équivalent. Maintenant, comme indiqué sur la page où tu as pris ce code, le code en question est en UTF-8 alors que la page est service en ISO-8859-1 (ou l'inverse), donc ça fait plein de caca, et si tu veux pouvoir utiliser le dit code il faut vraiment être sûr de récupérer ça au niveau "binaire".

    C'est pour ça que je disais que ce n'est pas très fûté, parce qu'entre les problèmes d'encodage sur le site PHP, au moment de ton copier-coller, dans ton souce PHP, etc, il y a peu de chances que ça passe sans casse, et il vaudrait donc mieux avoir la même chose avec des \xnn qui eux, passeraient à tous les coups.

    Mais comme évoqué plus haut, si elles sont disponibles, il vaut mieux utiliser les fonctions mb_convert_ ou iconv_ qui font déjà tout ça très bien et connaissent nettement plus d'encodages.

    Jacques.
     
  9. bigs32
    bigs32 WRInaute occasionnel
    Inscrit:
    8 Mai 2006
    Messages:
    438
    J'aime reçus:
    0
    mais oui , je comprends mieux .
    je suis en firefox et j'ai changé l'encodage .et effectivement la fonction s'ecrit autrement .
    sinon c'est vrai en binaire c'est mieux mais je comprends pas trop des \xnn comme tu dis .
    il y a des infos là dessus ?
     
  10. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 579
    J'aime reçus:
    0
    Dans une chaîne de caractères (délimitée par des " et pas par des '), tu peux utiliser une notation en \xnn pour n'importe quel caractère, nn étant le code hexa du caractère correspondant.

    Par exemple "\x20" c'est un espace :)

    Ca a l'avantage que comme ça n'utilise que des caractères qui sont les mêmes pour tout le monde, il n'y a pas de risque de "perte" en cours de route.

    Tu peux faire la même chose avec \nnn où nnn est la notation en octal. Je te rassure, personne n'utilise ça :)

    De la même façon, il y a quelques codes \x genre \n qui est le "linefeed" (LF, ASCII 10 décimal, 0a hex, 12 octal). Donc \n et \x0a ou encore \012 c'est la même chose.

    C'est documenté ici:

    http://www.php.net/manual/en/language.t ... tax.double

    Sinon il semblerait aussi qu'il y ait une notation en %uxxxx pour les caractères UTF-8... Pas un grand pro de PHP, donc je passe mon tour...

    Jacques.
     
Chargement...
Similar Threads - Fonction encodage utf8 Forum Date
Adresse mail ne fonctionne plus après modif de DNS Noms de domaine et référencement 26 Mai 2022
Méthode qui fonctionne le mieux en référencement SEO Débuter en référencement 19 Avril 2022
Onclick Select ne fonctionne pas dans Chrome Développement d'un site Web ou d'une appli mobile 21 Mars 2022
Des adresses qui ne fonctionnent plus... Développement d'un site Web ou d'une appli mobile 6 Novembre 2021
fonctionnement précis outil suppression url search console Débuter en référencement 18 Octobre 2021
PHP / CURL : interrogation page tiers ne fonctionne plus Développement d'un site Web ou d'une appli mobile 2 Octobre 2021
ma redirection ne fonctionne pas URL Rewriting et .htaccess 18 Août 2021
url rewriting ne fonctionne pas chez moi URL Rewriting et .htaccess 4 Août 2021
mon code ne fonctionne pas pour masquer les .php URL Rewriting et .htaccess 31 Juillet 2021
htaccess qui fonctionne partout sauf sur 1 seul PC URL Rewriting et .htaccess 28 Juillet 2021
La fonction mail (PHP) ne passe pas ! Demandes d'avis et de conseils sur vos sites 28 Juin 2021
Outil "Désavouer des liens" ne fonctionne plus Netlinking, backlinks, liens et redirections 18 Mai 2021
Fonction récursive PHP. Développement d'un site Web ou d'une appli mobile 24 Avril 2021
Annonces thématiques non fonctionnelles AdSense 6 Avril 2021
Récapitulatif Les CMP (Consent Management Platform) : intérêt, fonctionnement... Administration d'un site Web 30 Mars 2021
Activation suivi e-commerce et fonctionnement côté GA Google Analytics 15 Mars 2021
Problème de fonctions synchrone/asynchrone Développement d'un site Web ou d'une appli mobile 24 Janvier 2021
Redirection non fonctionnelle URL Rewriting et .htaccess 18 Septembre 2020
Fonctionnement CPC/CPM AdSense 16 Avril 2020
Logique de fonctionnement d'une application mobile Développement d'un site Web ou d'une appli mobile 17 Mars 2020