Page 1 sur 1

Reparer encodage (héhé)

Posté : 22 mars 2014, 02:11
par jean-monique
Bonjour,

Je suis sur un projet qui crawl des pages de divers (beaucoup) de sources, et je me rends compte que, même en prenant les entêtes et les balises meta en considérations, je me retrouve toujours avec des caractéres forts disgracieux :).

La solution pour laquelle j'ai opté: une bonne belle expression régulière bien moche ! (pléonasme ?)

Comment remédieriez vous à ce problème (je cherche la manière la plus propre possible)?

pour info php5.5, symfony 2 doctrine 2 (j'ai cherché s'il existait des helpers pour ça, manifestement pas

merci !

Re: Reparer encodage (héhé)

Posté : 22 mars 2014, 10:30
par xTG
La bibliothèque mb est tout à fait pour ce genre de problème :
- détection d'encodage
- conversion d'un encodage à un autre

http://fr2.php.net/manual/en/ref.mbstring.php

Re: Reparer encodage (héhé)

Posté : 22 mars 2014, 12:13
par jean-monique
Oui... sauf que mon soucis c'est que l'encodage interne de ma string est pas le bon :/
essaye donc
            var_dump(mb_detect_encoding('Comprimés'));
            var_dump(mb_detect_encoding('Comprimés'));
La solution est forcément de plus haut niveau, de l'ordre de la rustine... ou alors ?
Je ne vois pas... si tu as un snippet de code qui fait proprement ce que je veux, je suis preneur.

Re: Reparer encodage (héhé)

Posté : 22 mars 2014, 13:05
par xTG
As-tu essayé avec le donnée originale plutôt qu'un copier/coller ?
En effet ce que tu postes ici ce sont deux chaînes dans le même encodage. ;)
A savoir celui du forum.
Si je les prends et que je les enregistre dans un fichier j'aurai alors un nouvel encodage (et ce pour les deux chaînes), à savoir celui du fichier.

Bref le mb_detect_encoding est la bonne méthode mais il faut l'utiliser sur l'originale.

Re: Reparer encodage (héhé)

Posté : 22 mars 2014, 13:47
par sirakawa
Exemple développé:
<?PHP
mb_internal_encoding("UTF-8");
error_reporting(E_ALL);
$i = "chaîne";
$z =mb_detect_encoding("$i", "UTF-8, ISO-8859-1, " ,TRUE);

print "$z $i";
mb_internal_encoding("UTF-8");
$converti = mb_convert_encoding($i, "UTF-8", $z);
print "$converti";
?>
évidemment s'il y a beaucoup de chaines...

Re: Reparer encodage (héhé)

Posté : 22 mars 2014, 17:01
par jean-monique
Je vais reformuler mon problème.

Je traite des données d'un grand nombre de sources.
95% du temps, avec de l'entête, des données meta, je retombe sur les pâtes
les 5% restant j'ai des aberrations: des chaînes dont l'encodage est UTF-8, mais qui en vérité sont double-encodées => héhé .

Je fais du scrapping, je n'ai donc pas de contrôle sur les données sources. J'ai juste à un moment des é dans une chaine dont l'encodage est UTF-8.

Re: Reparer encodage (héhé)

Posté : 22 mars 2014, 19:39
par xTG
les 5% restant j'ai des aberrations: des chaînes dont l'encodage est UTF-8, mais qui en vérité sont double-encodées => héhé .

Je fais du scrapping, je n'ai donc pas de contrôle sur les données sources. J'ai juste à un moment des é dans une chaine dont l'encodage est UTF-8.
Tu ne peux pas y faire grand chose...
Tenter d'exploiter un plat de spaghettis...
Je ne vois que gérer des règles en fonction des sources si ces dernières renvoient toujours des chaînes mal encodées.
Pour celle qui encode double => décodage double, ect

Et si tu ne peux pas classer tes sources ainsi...
Tu crois toujours au père-noël ? :roll:

Re: Reparer encodage (héhé)

Posté : 24 mars 2014, 01:03
par jean-monique
Ben à coup de strpos ou d'expression régulière, dès qu'on trouve un des double char caracteristique, on double décode.
à la réflexion c'est pas si sale.

Ben classer les sources c'est relou, vu que (y'a pas que du propre partout) elles sont parfois héterogènes (oui, "arrrg" est le tèrme technique ici de circonstance), et surtout, je voudrais ajouter des sources à la volé sans me poser de questions.

Ma solution fonctionne, je suis juste integriste du propre, ça me chiffonne un peu... j'en resterai là :p

Re: [RESOLU] Reparer encodage (héhé)

Posté : 29 mars 2014, 21:34
par jean-monique
http://stackoverflow.com/questions/9107 ... hing-utf-8
=> y'a une bibliotèque qui peut changer la vie des gens qui font du scrapping en bourrins \o/ yeah

Re: [RESOLU] Reparer encodage (héhé)

Posté : 06 avr. 2014, 15:29
par @rthur
Merci jean-monique pour ce partage, effectivement ça semble une très bonne trouvaille.
Je mets le lien direct vers la librairie sur github : https://github.com/neitanod/forceutf8