Question

Un site que je viens de terminer avec un ami a une galerie où l'on peut télécharger des images et des fichiers texte. Le fichier texte uniquement accepté (au développement de la facilité) est txt et va normalement sans anicroche (ou non ..)

Les problèmes que j'ai rencontrés sont les mêmes de tout développeur. ASCII étendu de Microsoft

Avant la sortie du texte à partir du fichier, je vais sur plusieurs couches différentes pour essayer de le nettoyer:

$txtfile = file_get_contents(".".$this->var['submission']['file_loc']);

// BOM Fun
    $boms = array
    (
        "utf8"    => array(3,pack("CCC",0xEF,0xBB,0xBF)),
        "utf16be"       => array(2,pack("CC",0xFE,0xFF)),
        "utf16le"       => array(2,pack("CC",0xFF,0xFE)),
        "utf32be"       => array(4,pack("CCCC",0x00,0x00,0xFE,0xFF)),
        "utf32le"       => array(4,pack("CCCC",0xFF,0xFE,0x00,0x00)),
        "gb18030"       => array(4,pack("CCCC",0x84,0x31,0x95,0x33))
    );
    foreach($boms as $bom)
    {
        if(mb_substr($txtfile,0,$bom[0]) == $bom[1])
        {
            $txtfile = substr($txtfile,$bom[0]);
            break;
        }
    }
$txtfile_o = $txtfile;
$badwords = array(chr(145),chr(146),chr(147),chr(148),chr(151),chr(133));
$fixwords = array("'","'",'"','"','-','...');
$txtfile_o = str_replace($badwords,$fixwords,$txtfile_o);
$txtfile_o = mb_convert_encoding($txtfile_o,"UTF-8");

Le str_replace est la méthode générale de conversion des citations intelligentes terrible de Microsoft, em tableau de bord, et leurs équivalents dans les points de suspension ASCII normale pour la sortie.

Ce code fonctionne parfaitement trouver sous la condition que le fichier téléchargé est ANSI / us-ascii.

Ce code ne fonctionne pas (pour aucune raison particulière) lorsque le fichier téléchargé est UTF-8.

Lorsque le fichier est UTF-8, visualiser le fichier lui-même dans le navigateur Web fonctionne très bien, mais l'impression via l'interface web en utilisant ce code ne fonctionne pas. Dans ce cas, les citations intelligentes deviennent une sorte de caractère accentué.

est où je suis coincé. La sortie de codage pour la page Web est UTF-8, le navigateur Web, il voit en UTF-8, le fichier est en UTF-8 et pourtant ni le remplacer pour les œuvres intelligentes de citations, ni ne l'affichage du navigateur Web les correctement.

Et toute l'aide sur ce serait grandement apprécié.

Était-ce utile?

La solution

Si je comprends bien votre problème est que votre code qui remplace les caractères « ASCII étendus » pour leurs homologues ASCII échoue lorsque l'utilisateur envoie un fichier en UTF-8.

C'était à prévoir. Vous ne pouvez pas utiliser sur les fichiers UTF-8 avec str_replace et similaires, qui fonctionnent au niveau des octets, tandis qu'un caractère en UTF-8 est constitué par un octet que pour les caractères dans la plage ASCII.

Qu'est-ce que je vous recommande de le faire est d'utiliser une heuristique pour déterminer si le fichier est encodé en UTF-8 (la nomenclature est une bonne façon si vous êtes sûr que ça va être présent) ou Windows 1252 ou tout et puis le convertir en UTF-8 si elle est pas. Dans ce cas, vous auriez pas besoin de remplacer les caractères, vous pouvez conserver les guillemets.

Autres conseils

Les caractères que vous essayez de remplacer des valeurs différentes d'octets en UTF8. En fait, ils ont plus d'un octet chacun en UTF8. Vous essayez de les rechercher avec Windows valeurs de codage et qui est la raison pour laquelle vous ne les trouverez pas.

Recherchez les séquences d'octets UTF8 des personnages et de les utiliser pour la recherche.

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