Avatar billede kongfjong Nybegynder
22. juli 2010 - 18:41 Der er 8 kommentarer og
1 løsning

Fil fra UTF-16 til UTF-8 så jeg kan bruge preg_match

Hej

Jeg står med et "lille" problem. Jeg skal kunne læse en UTF-16 encoded fil ind og derefter foretage noget preg_match på den streng der så at sige kommer ud af det.

Problemet opstår, når jeg prøver at printe indholdet af filen på skærmen, så ser det højst mærkværdigt ud. Jeg har snuset mig frem til at det er en UTF-16 encoded fil, men skridtet herfra kan jeg så ikke lige greje...

Filen er denne: http://dev.footballground.dk/files/holdanalyse/fm_ingame/16CarstenChristensen.html

Koden er denne:

<?php
$file = $_SERVER['DOCUMENT_ROOT'].'files/holdanalyse/fm_ingame/16CarstenChristensen.html';
$file_content = file_get_contents($file);

echo $file_content;
?>

Outputtet kan ses her: http://dev.footballground.dk/html_dom_test.php

Jeg har afprøvet både at læse det ind i et DOM-object vha. DOMDocument-objektet, men den meldte (naturligvis) en entity-fejl og jeg har prøvet at konvertere den vha. iconv, som heller ikke gav det ønskede resultat.

Er der nogen derude der kan hjælpe mig? Jeg gætter på at problemet ligger i både encodingen og måske at det kan være multibyte-streng... Men det er alt sammen gætterier der bygger på min relativt begrænsede viden om lige præcis det emne :)

Men hvis man kunne, på en eller anden måde, konvertere den streng der kommer i første omgang, om en til en "alm" UTF-8 streng, så tror jeg meget ville være godt :D

På forhånd tak for hjælpen :)
Avatar billede intenz Novice
23. juli 2010 - 09:39 #1
Hvis du webhotel har mbstring extension sat til (hvilket de burde) kan du bruge:
http://www.php.net/manual/en/function.mb-convert-encoding.php

$streng = mb_convert_encoding($string, 'UTF-8', 'UTF-16');
Avatar billede kongfjong Nybegynder
23. juli 2010 - 10:56 #2
Ja den løsning har jeg forsøgt mig med, og med følgende kode

$file = $_SERVER['DOCUMENT_ROOT'].'files/holdanalyse/fm_ingame/16CarstenChristensen.html';
$file_content = file_get_contents($file);

$utf8_file_contents = mb_convert_encoding($file_content, 'UTF-8', 'UTF-16');

echo $utf8_file_contents;

Ser output således ud: http://dev.footballground.dk/html_dom_test.php
Avatar billede intenz Novice
23. juli 2010 - 11:23 #3
Det ser ikke ud til at stien til filen er korrekt.

"Warning: file_get_contents(/home/www/dev.footballground.dk/files/holdanalyse/fm_ingame/16CarstenChristensen.html) [function.file-get-contents]: failed to open stream: No such file or directory in /home/www/dev.footballground.dk/html_dom_test.php on line 15"
Avatar billede kongfjong Nybegynder
23. juli 2010 - 13:09 #4
Sådan :) Var blevet slettet ved et uheld :)
Avatar billede intenz Novice
23. juli 2010 - 13:39 #5
Avatar billede intenz Novice
23. juli 2010 - 13:40 #6
Du skal evt. have sat encoding rigtigt på outputtet også (<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">), hvis din browser ikke selv automatisk vælger utf-8.
Avatar billede kongfjong Nybegynder
23. juli 2010 - 13:44 #7
Har leget med encoding, f.eks. ved at sætte denne header header('Content-Type: text/plain; charset=utf-8');

:)
Avatar billede mike1963 Nybegynder
23. juli 2010 - 16:30 #8
Hmmmm

IE arbejder default i UTF-16 altså doublebyte - fast 2 byte per symbol

UTF-8 kan være fra 1-4 byte per symbol - altså varierende.

Det jeg så var korrumperet fuldstændigt ...

At sætte encoding til UTF-8 skal afstemmes med PHP ini fil'en ?

...men kilden skal jo være utf-8 førend man kan erklære den utf-8 ...

og jeg bruger en NOTEPAD++ hvor jeg redigerer alt i utf-8 - ALT !

Og når så et aller anden værktøj ikke detecter det, så smadrer den næste bare indholdet uden at vide det :-(

ikke megen hjælp i situationen - men jeg fornemmer lidt forvirring ?
Avatar billede kongfjong Nybegynder
09. august 2010 - 12:57 #9
Jeg fandt på en (frygtelig) løsning, hvor jeg smed indholdet fra filen over i en tabel i databasen, der er encoded som ascii. Et temmelig "grim" måde at gøre det på, men så kunne jeg hente det ud, og bruge det som jeg ville :)

Men tak for inputsene :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester