Soucis avec un charset trompeur, enfin je pense

WRInaute occasionnel
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
 
Nouveau WRInaute
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()?
 
WRInaute occasionnel
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
 
WRInaute occasionnel
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 ;)
 
WRInaute occasionnel
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...
 
WRInaute occasionnel
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.
 
WRInaute occasionnel
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..
 
WRInaute occasionnel
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.
 
WRInaute occasionnel
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
 
Discussions similaires
Haut