[RESOLU] Reparer encodage (héhé)

Petit nouveau ! | 8 Messages

22 mars 2014, 02:11

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 !

ViPHP
xTG
ViPHP | 7331 Messages

22 mars 2014, 10:30

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

Petit nouveau ! | 8 Messages

22 mars 2014, 12:13

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.

ViPHP
xTG
ViPHP | 7331 Messages

22 mars 2014, 13:05

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.

Mammouth du PHP | 2278 Messages

22 mars 2014, 13:47

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...
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 8 Messages

22 mars 2014, 17:01

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.

ViPHP
xTG
ViPHP | 7331 Messages

22 mars 2014, 19:39

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:

Petit nouveau ! | 8 Messages

24 mars 2014, 01:03

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

Petit nouveau ! | 8 Messages

29 mars 2014, 21:34

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

06 avr. 2014, 15:29

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
Quand tout le reste a échoué, lisez le mode d'emploi...