7
votes

Lire le fichier ANSI et convertir en chaîne UTF-8

Y a-t-il un moyen de le faire avec PHP?

Les données à insérer ont l'air bien lorsque je l'imprime.

mais quand je l'insère dans la base de données, le champ devient vide.


3 commentaires

Essayez d'utiliser mysql_real_escapape_string () php.net/manual/fr/function.mysql-real-escape-string.php peut-être que la chaîne à insérer contient des caractères utilisés mon mysql


J'ai lu la chaîne à partir du fichier TXT et constatez que certaines d'entre elles renvoient ANSII certaines d'entre elles de retourner à l'aide de mb_detect_encoding ($ données), de toute solution


Il n'y a pas une telle chose que ascii .


3 Réponses :


14
votes
ANSI_X3.4-1968
ANSI_X3.4-1986
ANSI_X3.4
ANSI_X3.110-1983
ANSI_X3.110
MS-ANSI

5 commentaires

utf8_encode convertit de l'ISO 8859-1 en UTF-8. Il ne peut donc être utilisé que si l'encodage d'entrée est ISO 8859-1


J'essaie $ data = iconv ('ascii', 'utf-8', $ données); Message: iconv () [fonction.iconv]: détecté un caractère illégal dans la chaîne d'entrée


ASCII est un sous-ensemble de UTF-8. Si les données étaient en réalité ASCII (qui n'est pas, comme le dit le message d'erreur), vous n'avez pas besoin de convertir.


J'ai lu la chaîne à partir du fichier TXT et constatez que certaines d'entre elles renvoient ANSII certaines d'entre elles de retourner à l'aide de mb_detect_encoding ($ données), de toute solution


Lorsque vous retournez faux, ouvrez simplement le fichier et regardez vos yeux pour les ordures. Supprimez-le à la main et essayez à nouveau. Si cela fonctionne, vous pouvez écrire une fonction de filtrage à exécuter avant de détecter le codage.



8
votes

"ANSI" n'est pas vraiment un brict. C'est une brève façon de dire "tout ce que Charset est la valeur par défaut dans l'ordinateur qui crée les données". Donc, vous avez une double tâche:

  1. Découvrez quelles utilisent les données Charset utilisent.
  2. Utilisez une fonction appropriée pour convertir en UTF-8.

    Pour # 2, je suis normalement heureux avec iconv () mais utf8_encode () peut également faire le travail si les données de source se produisent à l'utilisation ISO-8859-1 .

    Mise à jour

    On dirait que vous ne savez pas ce que vous utilisez vos données. Dans certains cas, vous pouvez le comprendre si vous connaissez le pays et la langue de l'utilisateur (par exemple, Espagne / espagnol) via le codage par défaut utilisé par Microsoft Windows sous un tel territoire.


3 commentaires

Je déteste ces éditeurs qui utilisent le mot "ANSI". Il est similaire à de manière incorrecte en utilisant "Unicode" pour UTF-16.


Le OP vous a raconté des valeurs de retour qu'il a obtenu de MB_Detect_encoding.


mb_detect_encoding () ne fait pas vraiment ce que la plupart des gens pensent. En fait, il est proche de l'inutile. Au plus, vous pouvez l'utiliser pour distinguer entre UTF-8 et UTF-16, mais vous devez le configurer correctement.



3
votes

Soyez prudent, en utilisant iconv () peut retourner false si la conversion échoue.

J'ai aussi un problème un peu similaire, certains personnages de l'alphabet chinois sont confrontés pour \ n si le fichier est codé dans unicode, mais pas s'il est uft-8.

Pour revenir à votre problème, assurez-vous que le codage de votre fichier est identique à celui de votre base de données. En utilisant également utf-8_encode () sur un texte déjà utf-8 peut avoir des résultats désagréables. Essayez d'utiliser mb_detect_encoding () pour voir le codage du fichier, mais malheureusement, de cette façon ne fonctionne pas toujours. Il n'y a pas de solution facile pour le codage du personnage de ce que je peux voir: (


0 commentaires