Soucis avec un charset trompeur, enfin je pense

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par yule, 5 Août 2014.

  1. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    415
    J'aime reçus:
    42
    Hello,

    J'ai un soucis en récupérant les métas de certain sites. Il y a des sites qui mentionnent un charset UTF-8 mais qui en réalité travail avec de l'iso-8859-1, c'est le cas par exemple avec le site h"tp://www.lequipe.fr

    Donc et forcément, les caractères seront affiché comme suit pour la méta title - L'ÉQUIPE - L'actualité du sport en continu -

    En général j'ai pas de soucis pour récupérer les métas, quelles soient en UTF-8, iso-8859-15, iso-8859-2 ou iso-8859-1 etc... Mais quant c'est trompeur comme avec le site mentionné ci-dessus, ben je me plante..

    J'essaye ceci :

    Code:
    $text = "L'ÉQUIPE - L'actualité du sport en continu";
    // Le "i" après le délimiteur du pattern indique que la recherche ne sera pas sensible à la casse
    if (preg_match("/é/i", "$text")) {
        echo "Un résultat a été trouvé.";
    	} 
    	else {
        echo "Aucun résultat n'a été trouvé.";
    	}
    donc si je trouve ce caractère, j'en ferais par la suite un

    Code:
    $text = utf8_decode($text);
    Mais avec ce code, je test uniquement é , comment faire pour traiter è, Ã, ê, etc.. ?

    Il y aurait une solution, ça serait de traiter uniquement sur le plaintext de la page (et pas sur le titre) ou je suis certain de trouvé un é (é), le hic est que çà peut être tompeur et pas refléter l'ensemble de la page s'il est trouvé une fois..

    Eh bon, il y a peut-être autre solution dans cette gestion ?

    D'avance merci
    Yule
     
  2. cduray
    cduray Nouveau WRInaute
    Inscrit:
    7 Avril 2008
    Messages:
    38
    J'aime reçus:
    0
    Bonjour,

    Quand je prends la home page de lequipe.fr et que je regarde le codage de la balise title, j'ai:
    Code:
    ...
    00000280  63 68 72 6f 6d 65 3d 31  22 3e 3c 74 69 74 6c 65  |chrome=1"><title|
    00000290  3e 4c 27 c3 89 51 55 49  50 45 20 2d 20 4c 27 61  |>L'..QUIPE - L'a|
    000002a0  63 74 75 61 6c 69 74 c3  a9 20 64 75 20 73 70 6f  |ctualit.. du spo|
    000002b0  72 74 20 65 6e 20 63 6f  6e 74 69 6e 75 2e 3c 2f  |rt en continu.</|
    000002c0  74 69 74 6c 65 3e 3c 6d  65 74 61 20 6e 61 6d 65  |title><meta name|
    ...
    
    Donc 0x89 0x51 pour É, ce qui est bien de l'UTF8 (le codage iso8859-p1 serait 0xc9 si je ne me trompe pas). Comment charges-tu la page? file_get_contents()?
     
  3. cduray
    cduray Nouveau WRInaute
    Inscrit:
    7 Avril 2008
    Messages:
    38
    J'aime reçus:
    0
    0xc3 0x89 pour É, j'ai été trop vite...
     
  4. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    415
    J'aime reçus:
    42
    Hello,

    JE récupère par plusieurs fonctions (lié d'abord par les redirections)

    1) curl
    2) libraire simple_html_dom (donc avec file_get_contents)
    3) getHost ( pour tenir compte des redirections metarefresh)

    De mon coté en récupérant le charset de ce site, il m'indique que c'est de l'ISO et donc toi c'est le UTF-8
    aie aie 8O
     
  5. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
  6. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    415
    J'aime reçus:
    42
    Ca va me permettre de reconnaître l'encodage utilisé, mais je vois pas dans quel sens je pourrais l'utiliser :oops:
     
  7. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
    Au final il te faut quel encodage ? Si il te faut de l'UTF8 :
    Code:
    $text = mb_convert_encoding($string, "UTF-8", mb_detect_encoding($text));
    Ou alors je n'ai pas bien compris ce que tu souhaite faire ;)
     
  8. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    415
    J'aime reçus:
    42
    Exact, il me faut de l'UTF-8


    Code:
    $text2 = "L'ÉQUIPE - L'actualité du sport en continu";
    $text3 = mb_convert_encoding($text2, 'UTF-8', mb_detect_encoding($text2));
    echo " $text3<br>";
    => il m'affiche : L'ÉQUIPE - L'actualité du sport en continu

    Faut que je fasse une pause rire...
     
  9. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
    Oui mais la première ligne elle vient d'où ? Parce que les caractères à © existent en utf8, et donc si c'est une chaîne mal stockée, c'est normal qu'elle ne soit pas converti.

    Il te faut une base de donnée en utf8, servir les pages en utf8 (ce qui semble être le cas sur 0kil) et stocker les titres une fois sûr que c'est de l'utf8.
     
  10. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    415
    J'aime reçus:
    42
    Très juste, et c'est effectivement le cas sur mon site, tout est en utf-8. Le pb vient pas de mon site si j'ose le dire ainsi.

    Cette première ligne vient du site lequipe.fr , tous les les 5-10 jours, je mets à jour les dernières infos des url dans ma bd, donc je récupère le title, la description, les keywords et le plaintext de l'url. j'ai réussi à contourner le pb de charset d'ordre général (à 99%), simplement pour des sites comme lequipe.fr ou lefigaro.fr (deux exemples) j'ai l'impression que ces deux sites "trichent" sur leurs charset.

    Si tu testes lequipe.fr pour en récupérer le charset, tu auras cette réponse ISO-8859-1, mais sur le site (code source) tu trouves ceci <meta charset="utf-8"> idem sur le code source de lefigaro.fr ( <meta charset="UTF-8">)

    Pour le moment, je fais comme sur mon premier post, il est déjà difficile de gérer l'encodage de son site, ceux des différents sites soumis, mais si en plus la meta diffère de la réalité, c'est un peu le casse pipe. On verra si à l'usure ma variante tiendra le coup..
     
  11. Amauri
    Amauri WRInaute occasionnel
    Inscrit:
    7 Avril 2011
    Messages:
    314
    J'aime reçus:
    0
    La solution que je propose au dessus consiste à récupérer le contenu (le title par ex) et de convertir la chaine en utf8, si besoin, avec le code ci-dessus

    Cela évite de se fier au charset déclaré par le serveur web ou par une balise meta.
     
  12. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    415
    J'aime reçus:
    42
    Après un bonne nuit... Faut effectivement que je refasse mon code en partant de ton principe. Je risque d'être confronté de plus en plus à ce genre de situation à l'avenir.

    Merci pour ton aide
    Bonne journée
    Yule
     
Chargement...
Similar Threads - Soucis charset trompeur Forum Date
Besoin d'aide pour soucis avec le certbot chez OVH - VPS URL Rewriting et .htaccess 6 Avril 2021
Avez vous des soucis avec paypal? Moi j'en peux plus. Monétisation d'un site web 13 Mars 2021
Soucis Meta description et Drupal Référencement Google 12 Octobre 2020
Soucis de description dans les resultats google Problèmes de référencement spécifiques à vos sites 10 Juin 2020
WordPress Soucis 404 suite changement structure permaliens Référencement Google 18 Juin 2019
Soucis d'affichage de publicité AdSense 4 Janvier 2018
soucis d'indexation Demandes d'avis et de conseils sur vos sites 27 Octobre 2017
Soucis d'affichage dans Google ! Référencement Google 22 Avril 2017
Soucis de classement ou incompréhension Problèmes de référencement spécifiques à vos sites 29 Octobre 2015
Prestashop - Soucis Url - Site multilingue Débuter en référencement 24 Juin 2015