2012-02-08 5 views
0

J'ai une table de base de données appelée "tweets". J'ai téléchargé des tweets en utilisant l'API de recherche Twitter. Le classement de la table de base de données est défini sur latin1_swedish_ci, comme conseillé par MySQL, car il supporte au moins le langage Enlish (je l'ai lu quelque part sur les pages de support de MySQL).Texte brouillé dans la base de données MySQL

Quoi qu'il en soit, je vois maintenant beaucoup de tweets qui ressemble à ceci:

$S&P news: Bank of America’s Mortgage-Bond Accord http://bit.ly/oTXC5a 
@LucciAlerts >> $BAC from a pincher play setup 
ë¯¸êµ­ì‹ ìš©ë“±ê¸‰ì´ë–¨ì–´ì¡Œë„¤ RT @CNBC RT @alexcrippen: S&P affirms AA+ 
  • Je crois & et les goûts peuvent être fixés en utilisant pour les traduire en caractères originaux (PHP) htmlspecialchars_decode();
  • Mais je ne sais pas comment réparer "America's", par exemple. Évidemment, ça devrait être un apostophe ('), mais comment puis-je le récupérer?
  • Enfin, il y a des gens qui aiment mettre toutes sortes de caractères ASCII dans leurs tweets (les étoiles, les "vrais" smileys au lieu des émoticônes). Ceux-ci ont été stockés comme "믯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯s, comme ci-dessus. Y at-il un moyen de résoudre ce problème et si oui, comment?

Toute aide est grandement appréciée!

+1

recommande un interrupteur rapide de latin1_swedish_ci UTF8 –

+2

Définir vos charset 'utf8' et essayez à nouveau. – Leigh

+0

Voir, par exemple, https://api.twitter.com/1/statuses/show.json?id=38041113268854784. Le contenu du texte Tweet ("texte") donné par l'API est: « $ \ u00aa \ u00aa \ u264f \ u00aa \ u00aa^$ \ u00aa \ u00aa \ u264f \ u00aa \ u00aa RT nadiaberod: makasih (\ u007B \ u007D) RT Lsa_fabulous: ThRT nadiaberod: anind_aurelly Lsa_fabulous dénycientes @nuruuuuuuuul ?? ". Comment alors, obtenez-vous les caractères originaux? En passant par utf8_decode() doesn; t aider ... – Pr0no

Répondre

2

Cela ressemble au double encodage utf-8 dans iso-8859. Je l'ai vu de nombreuses fois, mais jamais autant que ça.

Fix votre application

Pour recevoir tous les caractères spéciaux ont reçu de l'API Twitter, votre base de données devrait être classement UTF8, pas latin1. L'utilisation de latin1_swedish_ci était un très mauvais conseil. En outre, la connexion à la base de données de votre application PHP peut ne pas être configurée correctement pour utiliser utf8.

lire ici: http://www.php.net/manual/en/function.mysql-set-charset.php les commentaires dans le manuel PHP valent toujours la peine d'être lus. Si vous utilisez zend ou une autre bibliothèque, il existe généralement une méthode permettant de dire à PDO ou à n'importe quelle couche de base de données d'utiliser utf8 dans la connexion db. Si vous le pouvez, supprimez tout le contenu et recommencez à remplir la base de données après avoir converti le classement et le jeu de caractères de votre client en utf8.

Fixer les données

Si vous ne pouvez pas supprimer tout le contenu, vous devez fixer la représentation ascii de vos doubles ou triples chaînes de UTF8 encodées directement dans la base de données. "Fixer" ces données est une tâche compliquée ... il est plus facile d'en récupérer une copie en utilisant une connexion à la base de données de classement latin1 et de les réécrire en utilisant une connexion de base de données utf-8. mais dans votre cas, les données semblent être codées en triple ou quadruple en UTF-8.

lire ici: http://blog.hno3.org/2010/04/22/fixing-double-encoded-utf-8-data-in-mysql/

protip: avant de commencer à jouer avec votre magasin de données deux décharges de côté. une avec le jeu de caractères client iso8859 et une autre avec le jeu de caractères client utf8.

Maintenant, vous pouvez essayer de le réparer.Essayez également de convertir la table de base de données en UTF8 en utilisant mysql CONVERT avant de faire la procédure décrite dans l'article du blog lié.

Questions connexes