Question

I, comme beaucoup d'autres développeurs PHP ont eu des problèmes avec le codage des caractères, la question décrira les étapes que je vais par faire en sorte que mes données sont enregistrées et délivrée comme UTF8. Je voudrais des conseils sur ce que je devrais considérer et ou le changement avec ma pensée actuelle.

J'ai une base de données MySQL DEFAULT CHARACTER UTF-8 mes tables ont collation des utf8_general_ci

J'utilise un script php pour lire les données à partir d'un flux RSS puis d'enregistrer ces données par base de données. Avant d'enregistrer ces données, je vérifie pour voir si ces données est UTF-8 ou non en procédant comme suit:

protected function _convertToUTF8($content) {
    $enc = mb_detect_encoding($content);
    return mb_convert_encoding($content, "UTF-8", $enc);
}

Lors de la sortie de ces données à une page Web je mets les en-têtes en php

header("Content-type: text/html; charset=utf-8");

et je mets également la balise méta Content-Type à utf-8

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

Jusqu'à présent, tout fonctionne comme prévu, je reçois pas de drôles de personnages et sortir tout va bien, mais je dois être en train de changer / envisager toute autre chose lorsqu'ils traitent avec ces données?

Le problème que je suis maintenant HAVING est sortie ces données dans un fichier txt (csv) J'utilise fwrite () qui a créé avec succès le fichier, mais la 3ème partie je passe ce fichier indique que le fichier n'est pas UTF- 8. Je ne suis pas sûr que les données sont émis sous la forme UTF-8 , comment puis-je vérifier? Une fois connecté sur le serveur distant via SSH et le chat i le fichier que je reçois quand je Itâs a VIM le fichier que je reçois quand je Itâ~@~Ys moins le fichier que je reçois It<E2><80><99>s. Qu'est-ce que je manque ici?

Merci à l'avance!

Était-ce utile?

La solution 2

A la fin, il était une nomenclature qui a été nécessaire pour l'application externe pour lire le fichier correctement.

Autres conseils

Vous ne pouvez pas détecter le codage de toutes les données. Le codage est toujours méta-informations à côté des données elles-mêmes.

Même mb_detect_encoding() essaie, il est préférable de le faire, vous ne devriez jamais l'utiliser pour gérer automatiquement les données. Parce qu'il est impossible de détecter coder des données elles-mêmes, cette fonction ne peut pas aussi bien.

Ne comptez pas sur elle. Utilisez uniquement pour une inspection manuelle au cas où vous avez besoin de déboguer un problème ou dans le dernier recours de repli, mais jamais dans les traitements de données standard. Un même alors, ne vous fiez pas trop d'information.

Comment puis-je dire? Juste un exemple: Un texte peut être valablement US-ASCII codé et une routine de détection pour UTF-8 sera de retour que c'est UTF-8 valide codé. Et c'est juste un exemple. La vérité est, ce n'est beaucoup plus complexe.

Alors, prenez pour acquis que vous ne pouvez pas détecter l'encodage à partir des données brutes.

Au lieu de cela, recherchez les informations de méta qui spécifie le codage. Si aucune information de codage est donnée, recherche le codage par défaut dans les documents de spécification pour le transport de données.

Dans votre cas de stocker des données de flux RSS, la recherche des informations, soit dans les en-têtes de réponse et / ou le prologue XML. Il contient normalement l'encodage en notation ISO du document.

En tant que votre base de données codées attend des données au format UTF-8 votre traitement doit veiller à ce que seules les données UTF-8 est mis dans la base de données. Donc, vérifier et acquérir le codage des données puis effectuez les étapes nécessaires pour changer le codage. Mais ne comptez pas sur mb_detect_encoding() pour effectuer ces étapes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top