Avatar billede htx98i17 Professor
03. maj 2010 - 21:27 Der er 15 kommentarer og
1 løsning

utf8 problemer

utf8 for en gang skyld
Bedst som jeg troede jeg var ved at have styr på alle de forhold der skal tages hensyn til, så driller det detåndelynme igen.

http://arbejde.christiannielsen.eu/index.php

Problemet er at det der udskrives fra database her i sætningen:
<?php echo(($dagenstimer['fag'])); ?><br>
(jeg kan indsætte funktionen utf8_encode() for at undgå mærkeligt tegn.)

udskrives som latin1 og derfor vises det mærkelige tegn.
Output er et skolefag, eksempelvis "sløjd".

Filen er oprettet i ultraedit, gemt som utf-8 NO BOM og uploaded binary.



koden er neden under.

<?php
    header("Content-Type: text/html; charset=utf-8");
   
    $man_dag = ($_GET['man_dag']) ? $_GET['man_dag'] : time();
   
    $sql = "SELECT fag FROM tblskoletimer WHERE ugedag = ".date("w",$man_dag)." ORDER BY fag ASC, id ASC ";
    $hentugeskema = mysql_query($sql) or die(mysql_error());
   
    $arr_ugedage[1] = 'Mandag';
    $arr_ugedage[2] = 'Tirsdag';
    $arr_ugedage[3] = 'Onsdag';
    $arr_ugedage[4] = 'Torsdag';
    $arr_ugedage[5] = 'Fredag';
    $arr_ugedage[6] = 'Lørdag';
    $arr_ugedage[0] = 'Søndag';
   
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd" >
<html>
    <head>
        <title>Dagbog</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8">
   
        <style type="text/css" >
           
            body {
                background-color:    #e8e8e8;
                font-family        :    verdana;
                font-size        :    10pt;
                color            :    #000000;
                margin            :    30px;
            }
           
            textarea {
                background-color:    #Fcfcfc;
                font-family        :    verdana;
                font-size        :    8pt;
                color            :    #000000;
                margin            :    5px;
                padding            :    10px;
            }
           
        </style>
    </head>

<body >
   
    <h2>Opret notat</h2>
    <form method="get" action="index.php" >
        <select name="man_dag" >
            <?php
               
                for($i = time()-432000; $i<=time(); $i+=86400) { ?>
                   
                    <option value="<?php echo($i); ?>" <?php if(date("z",$man_dag) == date("z",$i)) echo"selected=\"selected\""; ?>><?php echo$arr_ugedage[date("w",$i)]; ?> <? echo(date("d.m.Y",$i)); ?></option>
                   
            <?php } ?>
               
        </select>
       
        <input type="submit" value="Vælg denne dag" >
    </form>
    <br>
   
    <h3><?php echo$arr_ugedage[date("w",$man_dag)]; ?> <?php echo(date("d.m.Y",$man_dag)); ?></h3>
   
    <form method="post" action="action/notat.php" >
    <?php
       
        while($dagenstimer = mysql_fetch_array($hentugeskema)) { ?>
            <p>
                <?php echo(($dagenstimer['fag'])); ?><br>
                <textarea cols="80" rows="10" name="<?php echo$dagenstimer['fag']; ?>" ></textarea>
            </p>
    <? } ?>
        <input type="submit" value=" Gem notat " >&nbsp;&nbsp;&nbsp;
        <input type="reset" value=" Reset " >
        <input type="hidden" name="dato" value="<?php echo(date("Y.m.d",$man_dag)); ?>" >
       
    </form>
   
   
   
</body>
</html>
(connection til db er taget væk)
Avatar billede htx98i17 Professor
03. maj 2010 - 21:30 #1
Dataene er indsat i tabellen via phpmyadmin og feltet "fag" i tabellen er sat til utf8_generel_ci.
I pma vises tegnene korrekt.
Avatar billede Slettet bruger
03. maj 2010 - 21:32 #2
Har du sat 'utf8' som charset for din database forbindelse?
Prøv evt. at kigge på mysql_set_charset()-funktionen
Avatar billede htx98i17 Professor
03. maj 2010 - 21:40 #3
Nej det har  jeg ikke. Det har aldrig været nødvendigt. Og jeg mener jo ikke at gøre noget som helst anderledes denne gang heller?

Man kan sige, der er jo ikke noget som helst som fortæller at forbindelsen til databasen skal være latin ? jeg har aldrig været ude for at den skulle være nødvendig. Det er samme server som altid og samme fremgangsmåde jeg har brugt som altid.
Avatar billede htx98i17 Professor
03. maj 2010 - 21:42 #4
Nu har jeg indsat den og det hjalp. Men jeg er træt af at skal bruge den, når jeg ikke har skulle det før. Hvorfor skal jeg pludselig det?
Avatar billede Slettet bruger
03. maj 2010 - 21:44 #5
Jeg er ikke stødt på et webhosting der har sat deres database op med utf-8 som standard charset, og derfor kræver det at du fortæller du gerne vil have dataen som utf-8 for din database-forbindelse.
Så hvis databasen sender dataen som latin, hvilket den vil gøre som standard, så skal du bruge mysql_set_charset()-funktionen som jeg henviste til før.
Avatar billede htx98i17 Professor
03. maj 2010 - 21:51 #6
Jeg opretter selv databaser på serveren (via plesk).

Jeg har ALDRIG i de 4 år vi har brugt denne server, været ude for at jeg skal definere charset til db.
Avatar billede Slettet bruger
04. maj 2010 - 00:21 #7
Well, siden mysql_set_charset() virkede så tyder det jo på at din forbindelse i PHP læste dataen som latin/iso-8859-1 og ikke utf-8, så jeg tror stadig at det er mysql-serveren, der er sat op til at bruge latin som standard.

Jeg smider denne kommentar som et svar, hvis du syntes det jeg er kommet med er nok! :-)
Avatar billede showsource Seniormester
04. maj 2010 - 03:41 #8
"Dataene er indsat i tabellen via phpmyadmin" =>
Prøv at indsætte med en uft8 fil du selv har lavet!
Avatar billede showsource Seniormester
04. maj 2010 - 03:46 #9
B.t.w. vil

mysql_query("set lc_time_names='da_DK'") or die (mysql_error());

gøre at du får danske ugedage
Avatar billede olebole Juniormester
04. maj 2010 - 14:04 #10
<ole>

roxki >> Fysikeren Werner Heisenberg udtalte engang noget i stil med: "Det vi observerer er ikke naturen i sig selv, men naturen udsat for vor måde at spørge på" ... og det er altid vigtigt at holde sig for øje  ;o)

Som showsource helt korrekt er inde på, skyldes problemerne ikke databasens opsætning, men det faktum at phpMyAdmin skodder, derved at den er sat op til at køre iso-8859-1

/mvh
</bole>
Avatar billede Slettet bruger
04. maj 2010 - 14:25 #11
Er ikke sikker på jeg forstår dig helt @olebole.
For mig ser det ud til at de data der er lageret i databasen er lageret som utf-8, men bliver læst som iso-8859-1 og derved bliver æ, ø og å lavet om til "mærkelige tegn", som @htx98i17 kalder dem.
Avatar billede olebole Juniormester
04. maj 2010 - 14:52 #12
Ja, men jeg er ret sikker på, du ikke ser problemet  =)

Data, der bliver indsat af et iso-8859-1 dokument, vil ikke pludselig blive utf-kodet i DB'en - uanset, hvordan denne er sat op. Når et utf-8 dokument derefter prøver at vise disse data, kan det kun gå galt med specialtegn som f.eks. æ, ø og å.

Jeg er meget sikker på, det er der, problemet ligger  ;o)
Avatar billede Slettet bruger
04. maj 2010 - 15:13 #13
Jeg er med på hvad du siger i post #12, nu er det bare sådan at min version af PHPMyAdmin kører utf-8 som standard, men jeg mener dog stadig at jeg bliver nød til at bruge mysql_set_charset()-funktionen da forbindelsen mellem PHP og MySQL kører iso-8859-1 som standard. Jeg udelukker ikke at jeg er forkert på den, men det er sådan jeg ser det og da jeg bruger mysqli-classen har jeg bare sat den til at kører mysqli_set_charset() i klassens konstruktør.
Vil da lige prøve at se om jeg kan få æ, ø og å til at virke uden brug af mysqli_set_charset() ! :-)
Avatar billede olebole Juniormester
04. maj 2010 - 15:24 #14
Prøv at indsætte data med en form i to helt alm. HTML/PHP dokumenter. Det ene gemt som iso-8859-1 og med tilsvarende meta - samt et, som er gemt som utf-8 med tilsvarende meta. DB'en skal naturligvis være sat op til at køre utf-8.

Vis så data, hentet fra DB'en med et dokument, gemt som utf-8 med tilsvarende meta. Så bør du ikke have problemer med æ, ø og å, når du viser utf-8 indholdet i utf-8 dokumentet
Avatar billede htx98i17 Professor
04. maj 2010 - 21:14 #15
Jeg har nu prøvet at indsætte i tabellen fra en utf8 fil. Og det var der problemet var. Eller dvs. problemet var phpmyadmin. DEt har jeg ikke været opmærksom på før. Så det var lige endnu en ting at skal huske ifb encoding. Suk. Hvem har opfundet encoding! :)

roxci -> tusind tak for deltagelsen, heldigvis skal jeg ikke til at definere med mysql_set_charset() :)

showsource -> tak for svar. Du havde det rigtige svar til spørgsmålet, så lig et svar.
Avatar billede htx98i17 Professor
30. juni 2010 - 19:29 #16
så lukkes der :) igen tak for deltagelsen
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