Avatar billede squazz Novice
08. april 2010 - 00:00 Der er 16 kommentarer og
1 løsning

PHP misfortolker æøå

Hej eksperter, jeg har et spørgsmål som har meget store relevans for mig, de 200 point er for hurtigst muligt at få et svar.

Jeg skal have smidt data fra min MySQL server til et excel ark, og sidder med den følgende kode (uddrag):

function str_replace_assoc($array,$string){
    $from_array = array();
    $to_array = array();
 
    foreach ($array as $k => $v){
        $from_array[] = $k;
        $to_array[] = $v;
    }
 
    return str_replace($from_array,$to_array,$string);
}

    $value = $row[$j];
    $replace = array("å" => "å","ø" => "ø","Ø" => "Ø","æ" => "æ","Å" => "Å","Æ" => "Æ");
    $strRpl = str_replace_assoc($replace,$value);
    $schema_insert .= "$strRpl".$sep;

Den fulde kode kan ses på Pastebin:
http://pastebin.com/eEEGc6wU

Nogle har måske set den fulde kode før, eller kan finde den online, dette er fordi jeg har fundet størstedelen online, og nu prøver at rette til. Problemet er dog ikke koden, problemet, tror jeg, er at PHP ikke tolker æøå ordentligt...
Avatar billede squazz Novice
08. april 2010 - 00:08 #1
Ekstra info:
Jeg bruger Surftown, med PHP Version 5.2.10
Avatar billede michael_stim Ekspert
08. april 2010 - 00:25 #2
Du skal have filen, doctypen og basen i samme tegnsæt.
Avatar billede keysersoze Ekspert
08. april 2010 - 06:53 #3
Avatar billede squazz Novice
08. april 2010 - 11:26 #4
@Michael, de ting havde jeg tjekket efter, Zend laver automatisk filerne i UTF-8, og min database er alle steder det er muligt sat til UTF og Unicode.

@keysersoze, det ser ud til at det rent faktisk virker det du har skrevet :) Nu bliver de data jeg smider ud i min Excel fil i hvert fald konverteret til æøå korrekt. Jeg har endnu ikke fået testet om det også virker så jeg kan smide æøå op i databasen så det ligger korret der, men det er helt klart noget jeg skal have tjekket efter. Dog kan dette ikke blive før efter weekenden :(
Avatar billede squazz Novice
08. april 2010 - 20:03 #5
@keysersoze, det virkede desværre ikke alligevel. Jeg har fulgt alt hvad der er skrevet i det link du har postet, men stadigvæk er det som om, at lige så snart PHP skal ind og lege med mine æø & å, så kan den ikke tolke det, og viser mig i stedet en rhombe med et spørgsmålstegn.

Har du/I andre idéer? Jeg ved dette er noget der har været oppe MEGET tit på eksperten, og jeg har fulgt MANGE af de guides og hjælp der kommer, men det virker ikke for mig.
Avatar billede keysersoze Ekspert
09. april 2010 - 21:59 #6
Du har også sikret dig hvordan webhotellet encoder? Prøv evt at forklare lidt mere om hvor det går galt og hvor det ikke gør.
Avatar billede squazz Novice
15. april 2010 - 22:44 #7
Det går galt så snart jeg "sender" æøå gennem PHP...

- Hvis jeg henter æøå ud fra min database bliver det til underlige tegn.
- Hvis jeg i en form taster æøå ind, og sender det til databasen, bliver det mærkligt...
- Hvis jeg taster det ind i en form, og får php til at printe det, bliver det mærkligt.
- Hvis jeg i koden siger at PHP skal printe æøå ud, bliver det mærkeligt.
- Hvis jeg i koden skiver æøå ind, og får php til at smide det ind i databasen, bliver det mærkeligt.

Hvordan tester jeg helt præcist hvordan mit webhotel encoder?
Avatar billede keysersoze Ekspert
17. april 2010 - 10:49 #8
Jeg arbejder ikke selv med PHP så jeg må desværre melde pas med hvor det kan ses og hvor det evt ændres.
Avatar billede squazz Novice
03. juni 2010 - 01:31 #9
Så blev der fundet et svar på æøå fra PHP til MySQL og tilbage igen. Løsningen var, at jeg nu kører i min MySQL database kører med UTF8, men mine filer kører i ISO8891. Dette var jeg simpelthen nødt til at gøre, da det på alle andre måder ellers gav problemer, hvor æøå blev lavet til nogle underlige tegn. Så rent faktisk, kan en blanding af charsets til tider også hjælpe. Jeg aner ikke hvorfor (sikkert noget med surftown), jeg kan kun sige hvad der er min erfaring. Nogen som har nogle kommentarer til dette? En evt. forklaring?

Jeg kan se der er en som har oprettet et spørgsmål om præcis det samme her: http://www.eksperten.dk/spm/909336
Avatar billede squazz Novice
18. august 2010 - 15:58 #10
Det lader umiddelbart ikke til at der er nogen som kunne forklare hvorfor de to charsets skulle blandes.
Hvis ikke der kommer lidt input tror jeg at jeg lukker med dette svar :)
Avatar billede keysersoze Ekspert
18. august 2010 - 18:12 #11
Alt du taler om er encoding i databasen og i dine filer - så længe du ikke har styr på samtlige steder kan der ske underlige ting. Det er fint at det virker nu, man kan altid være heldig selv med sammenblanding, men at det virker nu er ingen garanti for at det også gør i fremtiden.
Avatar billede squazz Novice
18. august 2010 - 23:02 #12
Er der virkeligt ingen måde hvorpå man kan sikre sig at ens kode også vil virke i fremtiden?

Hvad mener du med at have styr på det alle steder?
Avatar billede keysersoze Ekspert
19. august 2010 - 18:27 #13
jo - samme encoding over det hele. det står nævnt i artiklen i #3 - meta, hvordan du gemmer filen, databaseopsætningen, udsendelsen fra serveren (hvor mange webhosts desværre har iso-8859-1 som standard) har alle betydning.
Avatar billede squazz Novice
19. august 2010 - 18:50 #14
Men det er jo så der hvor jeg prøvede at sætte ALT til utf, men hvor det først virkede hvis jeg kørte mine sider i iso men alt andet i utf :s
Avatar billede keysersoze Ekspert
19. august 2010 - 19:16 #15
hvordan har du så sikret dig at siden sendes korrekt fra serveren?
Avatar billede squazz Novice
19. august 2010 - 19:59 #16
Jeg har sat alt i PHPMyAdmin til at være UTF, og brugt headers til at styre charset...
Avatar billede keysersoze Ekspert
19. august 2010 - 20:08 #17
Jeg er ikke nok inde i PHP til at kunne se om det er tilstrækkeligt så du må trace lidt på det selv vha nogle værktøjer - men lidt mere læsestof om det samme; http://htmlpurifier.org/docs/enduser-utf8.html#fixcharset-server - http://www.phpwact.org/php/i18n/charsets
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