Avatar billede skwizie Nybegynder
05. oktober 2007 - 14:54 Der er 30 kommentarer og
1 løsning

Danske tegn i variabels værdi virker ikke

Jeg har en php side hvor jeg via en ekstern fil indhenter nogle variabler med noget tekst. Men hvis der i disse tekster befinder sig de danske tegn æ,ø,å bliver de udskrevet som ? eller en firkant.

Jeg har sat charset til UTF-8. Hvis jeg prøver med ISO-8859-1, bliver variablerne udskrevet korrekt, men så bliver den almindelige tekst som står i HTMl koden ikke udskrevet korrekt. Altså det får lige modsat virkning...

Hvad er løsningen på det her problem som er lidt træls :)!
Avatar billede pidgeot Nybegynder
05. oktober 2007 - 14:57 #1
Den eksterne fil skal have samme tegnsæt som resten af siden (dvs. selve teksten skal have det tegnsæt, ikke at du skal kalde header() fra den anden fil).
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 15:09 #2
Avatar billede skwizie Nybegynder
05. oktober 2007 - 15:34 #3
Har prøvet at kigge lidt på den funktion, men kan ikke rigtig se mig ud af hvad jeg skal benytte for at erklærer char typen i min eksterne PHP fil?
Avatar billede skwizie Nybegynder
05. oktober 2007 - 15:37 #4
Er det rigtigt forstået at det er en "komponent" der skal installeres på serveren?
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 15:41 #5
Den skulle gerne bare være der. Dermed kan du konvertere fra, hvad der kunne være iso-8859-1 i din eksterne fil, til utf-8, som du bruger på siden.
Avatar billede skwizie Nybegynder
05. oktober 2007 - 15:44 #6
OK, hvordan skal jeg så gøre dette?

Min eksterne fil ser således ud:

<?php

£errorMsg1 = "Teks med øæå";

?>
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 15:45 #7
Du bruger vel bare eksemplet på http://de2.php.net/manual/da/function.iconv.php
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 15:46 #8
Øh, siger du include til den eksterne fil?
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 15:48 #9
...for i så tilfælde skal du bare gemme dine eksterne filer med UTF-8. Hvis man rimeligvis kan, skal man bare bruge det samme tegnsæt i hele sit system.
Avatar billede skwizie Nybegynder
05. oktober 2007 - 15:50 #10
OK! Jeg laver en require på min eksterne php fil inden der sker noget som helst andet i min hovedfil.

Har prøvet at indsætte
iconv_set_encoding("output_encoding", "ISO-8859-1");

i min eksterne fil, men det hjælper ikke!
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 15:51 #11
Nej, det hjælper ingenting på forskellige tegnsæt i forskellige include-filer. Prøv bare 05/10-2007 15:48:13

Jeg forstod det som at du hentede en tekst et andet sted fra, hvor teksten var i "forkert" tegnsæt og denne tekst skulle konverteres, fordi du ikke kunne få den på anden måde.
Avatar billede skwizie Nybegynder
05. oktober 2007 - 15:54 #12
OK, fik det til at virke med:

iconv("ISO-8859-1", "UTF-8", "Du har ikke gennemført step 1");

Men er der ikke en anden måde hvorpå man definere at alt tekst i den eksterne php fil skal tolkes som UTF-8?
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 15:55 #13
Jo, 05/10-2007 15:48:13
Avatar billede skwizie Nybegynder
05. oktober 2007 - 15:57 #14
Ja, men hvordan skal jeg helt konkret skrive koden?
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 15:57 #15
Du skal ikke skrive den anderledes, du skal bare gemme filen som UTF-8
Avatar billede skwizie Nybegynder
05. oktober 2007 - 16:00 #16
Er stadig ikke med! Hvad mener du med at jeg skal gemme den som UTF-8? Jeg har jo ikke andet i den end:

<?php

£errorMsg1 = "Teks med øæå";

?>
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 16:45 #17
Den editor, i hvilken du skriver i filen, skal gemme filen som UTF-8.
Avatar billede skwizie Nybegynder
05. oktober 2007 - 16:56 #18
Jeg bruger Dreamweaver, og jeg kan umiddelbart ikke finde nogle steder hvor man kan gemme filen som UTF-8
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 17:39 #19
Jeg kender ingenting til dreamweaver. Men selv sølle Notepad i Windows ka' ;)
Avatar billede pidgeot Nybegynder
05. oktober 2007 - 17:55 #20
Tip: Kig dig omkring efter ordene "character set" eller "encoding". Det er muligt det gemmer under nogle preferences eller properties.

(Nej, jeg ved heller ikke hvor det måtte befinde sig - holder mig til Vim)
Avatar billede olebole Juniormester
05. oktober 2007 - 17:57 #21
<ole>

Desværre synes DW for lam til at beskæftige sig med slige 'detaljer'!

Jeg har en DW installeret (omend jeg aldrig bruger den) og har lige fulgt anvisningerne og sat den op til at spytte utf-8 dokumenter ud. Den skriver ganske rigtigt også utf-8 som charset i Content-Type meta'en i nye dokumenter - men når jeg efterfølgende åbner et såkaldt 'utf-8' dokument i Notepad og vil gemme det påny, viser det sig at være et ANSI (iso-8859-1) dokument  :o|

skwizie >> Åben dine dokumenter i Notepad og gem dem så igen som utf-8  :)

/mvh
</bole>
Avatar billede pidgeot Nybegynder
05. oktober 2007 - 18:03 #22
Det kan jeg så ikke tilråde. Notepad tilføjer en UTF-8 BOM, som PHP ikke kender til - så den bliver skrevet ud i forbindelse med en include, hvilket kan forstyrre eks. header()-kald.

Gør du det, er du faktisk nødt til at fjerne det manuelt med en editor der IKKE kan Unicode. Af den grund vil jeg foreslå du finder en lille teksteditor der ikke placerer den - Notepad++ skulle udelade det, men jeg har ikke afprøvet den: http://notepad-plus.sourceforge.net/uk/site.htm
Avatar billede olebole Juniormester
05. oktober 2007 - 18:29 #23
Ja, det er forresten korrekt. Af uransagelige årsager, har man valgt at se stort på denne bug, der vist blev introduceret i PHP 5.0.5 - og først bliver rettet i version 6.0  :(

Om det er et udslag af, at PHP er skrevet i et lille, semiafsondret skandinavisk land, ved jeg ikke, men den arrogante ignoreren af dette problem synes yderst uhensigtsmæssig. Utf-8 hører uløseligt sammen med en globaliseret verden, Web 2.0, XML, AJAX, m.m. - og BOM-informationerne er en kæmpe fordel at have i filerne.

- tjaahhh ...  :o|
Avatar billede olebole Juniormester
05. oktober 2007 - 18:32 #24
- en mulighed er at downgrade til PHP 5.0.3 og så vente med at upgrade til version 6.0 engang kommer ... omend det er ynkeligt, man skal gribe til den slags for at løse så enkelt problem
Avatar billede pidgeot Nybegynder
05. oktober 2007 - 19:20 #25
BOM er ikke reelt en del af UTF-8 standarden, og det eneste det fortæller er at det er en UTF-8 fil - noget som jeg vil mene at Unicode-kompatible programmer altid bør gå ud fra indtil de finder ud af andet, da det tillader ikke-Unicode-programmer at behandle dataene så normalt som muligt - en UTF-8 fil uden nogen form for specialtegn vil være 100% identisk med en ANSI udgave af samme når BOM ikke er til stede.

Man kan så godt argumentere for at det er spild af resourcer potentielt at skulle afkode filen to gange, men det giver til gengæld den gevinst at man ikke genererer gamle programmer ved et uheld.
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 19:22 #26
Ja, jeg bruger ikke selv Notepad uden at være tvunget til det, men den sætter jo de tre berømte tegn foran. Dem kunne man så måske fjerne med DW ... Nej, konklusionen er vel at produkter, hvis navne indeholder "W" ikke dur. Dreamweaver, Windows, Whiskey, ... ok, det er nok ikke en perfekt regel alligevel. Men http://editplus.com/ har ikke de tre tegn foran, når man gemmer som UTF-8 

Z:\>more <z.txt
´&#9559;&#9488;heja&#9500;©&#9500;Ñ

Z:\>more <zz.txt
hjea&#9500;ª&#9500;©&#9500;Ñ

z er fra notepad/vista, zz er fra editplus/vista
Avatar billede erikjacobsen Ekspert
05. oktober 2007 - 19:26 #27
ekspertens tegn-konverteringer kunne måske også bruges som sjovt indslag ;)
Avatar billede olebole Juniormester
05. oktober 2007 - 22:47 #28
pidgeot >> Jeg er helt klar over, BOM ikke er del af Unicode, men det er nu engang ikke hensigtsmæssigt, at man ikke længere kan bruge 80% af de tilgængelige (web)editors til PHP, hvis man vil skrive tidsvarende kode.
Avatar billede skwizie Nybegynder
26. oktober 2007 - 18:54 #29
erikjacobsen -> læg et svar
Avatar billede erikjacobsen Ekspert
26. oktober 2007 - 19:13 #30
Jeg samler slet ikke på point, tak.
Avatar billede skwizie Nybegynder
19. januar 2009 - 10:03 #31
Lukker så :)
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