Avatar billede Slettet bruger
16. oktober 2009 - 19:12 Der er 12 kommentarer og
1 løsning

ÆØÅ for sidste gang ?

Hej dav.

Jeg har (igen) brugt hele dagen på ÆØÅ-sjov. Men nu skal det fandme være slut!
- Derfor denne løsning (spørgsmålet er om det ER slut hermed?)

1. Alle PHP-sider gemmes i UTF-8

2. Alle MySQL tabeller benytter UTF-8

3. Alle MySQL-connections taler UTF-8 vha.:
$dbCon = mysql_connect(...
mysql_set_charset('utf8',$dbCon)

4. Alt output til browser specificeres som UTF-8 med:
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">

5. Og endelig konverterer jeg alt input fra browser til UTF-8 med:

function var2utf8($in)
    {
    if (is_array($in))
        foreach ($in as $key => $value)
            $utf8out[var2utf8($key)] = var2utf8($value);
    else
        if(is_string($in))
            if(mb_detect_encoding($in."a") != "UTF-8")
                return utf8_encode($in);
            else
                return $in;
        else
            return $in;
    return $utf8out;
    }

$_POST = var2utf8($_POST);
$_GET = var2utf8($_GET);
$HTTP_COOKIE_VARS = var2utf8($HTTP_COOKIE_VARS);


Det ser ud til at virke efter hensigten (5 browsere, Vista, XP og Ubuntu)
- men jeg skal igang med et større system, og vil gerne være sikker inden...
Avatar billede Slettet bruger
16. oktober 2009 - 19:45 #1
Jeg mener ikke at UTF-8 er den rigtige til ÆØÅ

I html, bør den være:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
Avatar billede Slettet bruger
16. oktober 2009 - 19:52 #2
Men hægter du så ikke ikke-nordvest-europæere af ?
- mener UTF-8 er den "bredeste" encoding...
Avatar billede nissen2630 Novice
16. oktober 2009 - 20:00 #3
Brug altid UTF-8
Avatar billede Slettet bruger
16. oktober 2009 - 20:25 #4
Jeg mener bare at FF kløjs i UTF-8
Avatar billede nissen2630 Novice
16. oktober 2009 - 20:34 #5
Niks..Ingen problemer UTF-8 i FF
Avatar billede erikjacobsen Ekspert
16. oktober 2009 - 20:57 #6
Link til siden?
Avatar billede ebusiness Nybegynder
16. oktober 2009 - 21:26 #7
5-eren kan du nok godt droppe, hvis ikke det er UTF-8 indhold som kommer igennem hvordan **** skal din PHP kode vide hvad det så er?

Det burde ikke være nødvendigt når du har sat encoding med et meta tag, men hvis du vil helgardere 112% så kan du også sætte accept-charset="UTF-8" i form elementer.
Avatar billede Slettet bruger
16. oktober 2009 - 21:39 #8
@ erikjacobsen : Den er ikke oppe endnu : )

@ ebusiness : Det kan PHP se på teksten selv (med mb_detect_encoding)
- (Mine) browsere på Windows i ISO-8859-1, mens de på Ubuntu leverer i UTF-8.
(ISO måske fordi jeg ikke har specificeret nogen accept-charset på formen..)
Avatar billede ebusiness Nybegynder
16. oktober 2009 - 23:43 #9
Nej, din PHP kode kan ikke ud fra bitsekvensen gætte hvilken tegnkodning den er beregnet til at blive dekodet med. Stort set det eneste praktiske middel i denne sammenhæng er at tjekke om en streng er legal UTF-8, i så fald er den højest sandsynligt enten beregnet til at blive dekodet som UTF-8, eller også består den kun af standard ASCII karakterer, hvorfor den vil blive dekodet korrekt som UTF-8.

Men blandt alle de underlige ASCII udvidelser og andre obskure tegnsæt kan en computer ikke gøre andet end at gætte.

Jeg kan oplyse at din nuværende kode helt sikkert ikke kan håndtere andet end UTF-8 og ISO-8859-1, for utf8_encode forudsætter at inputtet er en ISO-8859-1 streng.

Jeg er ikke helt sikker på om det kan resultere i en fejl, men som din kode er nu så kan en UTF-8 streng blive genkendt som noget andet.

Du kan tvinge funktionen til altid at returnere enten UTF-8 hvis det er en legal UTF-8 streng, eller false i modsat fald: mb_detect_encoding($in."a",'UTF-8')
Avatar billede Slettet bruger
17. oktober 2009 - 05:08 #10
TAK!

Nu (lidt klogere:http://www.w3.org/International/tutorials/tutorial-char-enc)

Ku' man beholde browsernes fuldfede Unicode (ISO 10646) hele vejen igennem ?
- men ak, ikke på listen af "character sets" i MySQL (andet navn?)

Hvordan har I andre løst dette oldnordiske problem ?
- MEGET gerne med ÉN include :D
Avatar billede erikjacobsen Ekspert
17. oktober 2009 - 08:22 #11
Det vi også mangler at vide, er hvorledes tegnsættet er angivet i HTTP-protokollen.
Avatar billede ebusiness Nybegynder
17. oktober 2009 - 22:09 #12
ISO 10646 er et character set (mere eller mindre det samme som Unicode), ikke en encoding. UTF-8, som du jo allerede har valgt, er en encoding af Unicode/ISO 10646, og alle 100.000 tegn er der.

"Det vi også mangler at vide, er hvorledes tegnsættet er angivet i HTTP-protokollen."

Sandsynligvis er der ikke angivet noget tegnsæt i HTTP headerne, men ja, det kunne han også godt vælge at gøre.
Avatar billede Slettet bruger
25. oktober 2009 - 18:59 #13
Godt så - Jeg dropper 5'eren igen - og sparer lidt strøm : )

Men tilføjer "accept-charset='UTF-8'" til ALLE forms.

Burde være overflødigt (eftersom HTML'ens "content-type" er specificeret som UTF-8) men det lader ikke til at bekymre (ihvertfald) Chrome.
- Men "accept-charset='UTF-8'" direkte på formen overholder den.

Tak til alle som deltog - points går til ebusiness (hvis ellers jeg kan finde ud af det...)
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