/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Hvilket tegnsæt sendes formen med?
Fra : Jonas Koch Bentzen


Dato : 19-03-03 13:45

Nogen, der kan hjælpe med følgende problem? Jeg har en formular på en side,
der er i UTF-8. Formularen har enctypen multipart/form-data. Nu har jeg
oplevet det problem, at en IE 3.0 (!) har postet noget data, der gav
følgende fejl, da det blev smidt ned i PostgreSQL-databasen:

Query failed: ERROR: Invalid UNICODE character sequence found (0xf87265)

Jeg er rimelig sikker på, problemet er, at IE'en har postet dataene med et
andet tegnsæt end det, det skal (UTF-8). Browseren har altså sendt f.eks.
ISO-8859-1-tegn, og det giver problemer.

Spørgsmålet er så: Kan jeg på en eller anden måde finde ud af hvilket
tegnsæt, browseren har postet dataene som, og så give en stor, fed
fejlmeddelelse, hvis browseren poster data i andet end UTF-8?

Kan oplysningen findes i de rå POST-data - og hvordan får jeg i så fald fat
på dem?

--
Jonas Koch Bentzen

http://findhim.com/

 
 
Lars Dybdahl (19-03-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 19-03-03 16:34

Jonas Koch Bentzen wrote:
> Nogen, der kan hjælpe med følgende problem? Jeg har en formular på en
> side, der er i UTF-8. Formularen har enctypen multipart/form-data. Nu har
> jeg oplevet det problem, at en IE 3.0 (!) har postet noget data, der gav
> følgende fejl, da det blev smidt ned i PostgreSQL-databasen:

IE 3 understøtter højst sandsynligt ikke utf-8 ved afsendelse af form
data... Microsoft kan grundlæggende ikke lide utf-8, fordi det konflikter
voldsomt med deres planer om at gøre Windows til Unicode. Unicode
understøtter nemlig et 16 bit tegnsæt, og med lidt udvidelser cirka 20 bit
(UTF-16), hvorimod utf-8 understøtter 31 bit. Microsoft er med andre ord på
vej over i en verden, som koster blod, sved og tårer, og understøtter et
mindre tegnsæt end f.eks. Red Hat Linux 8 gør allerede i dag.

> Jeg er rimelig sikker på, problemet er, at IE'en har postet dataene med et
> andet tegnsæt end det, det skal (UTF-8). Browseren har altså sendt f.eks.
> ISO-8859-1-tegn, og det giver problemer.

Jep.

> Spørgsmålet er så: Kan jeg på en eller anden måde finde ud af hvilket
> tegnsæt, browseren har postet dataene som, og så give en stor, fed
> fejlmeddelelse, hvis browseren poster data i andet end UTF-8?

Ja - du kan faktisk autodetektere utf-8. UTF-8 standarden finder du her:

http://www.ietf.org/rfc/rfc2279.txt

Og hvis du tænker dig lidt om, så vil meget, meget få iso8859-1
tekstsekvenser, som ikke er ren 7-bit ascii, være gyldig utf-8. Så hvis du
antager, at det indsendte er utf-8, og ved fejl skifter til antagelsen at
det er iso-8859-1, så burde det virke i praksis.

> Kan oplysningen findes i de rå POST-data - og hvordan får jeg i så fald
> fat på dem?

Hvis der er en standard, er den højst sandsynligt ikke implementeret i MSIE
3.

Lars.

--
Freelance programmør
Programmering mod timebetaling

Jonas Koch Bentzen (19-03-2003)
Kommentar
Fra : Jonas Koch Bentzen


Dato : 19-03-03 22:12

Lars Dybdahl wrote:
>
> Ja - du kan faktisk autodetektere utf-8. UTF-8 standarden finder du her:
>
> http://www.ietf.org/rfc/rfc2279.txt

Det er nok fordi, jeg ikke har den store erfaring med hex-værdier mm., men
jeg må indrømme, jeg ikke aner, hvordan jeg skal finde ud af, om det er
UTF-8. Der findes ikke en charset-værdi, man kan aflæse ud af de rå
POST-data?

Man kunne jo også vælge bare at ignorere IE 3. Har du hørt om andre
browsere, der giver problemer i den retning?

> Og hvis du tænker dig lidt om, så vil meget, meget få iso8859-1
> tekstsekvenser, som ikke er ren 7-bit ascii, være gyldig utf-8. Så hvis du
> antager, at det indsendte er utf-8, og ved fejl skifter til antagelsen at
> det er iso-8859-1, så burde det virke i praksis.

Det er et internationalt site, der også vil få brugere fra fjernøsten, så
jeg kan ikke bare antage, at det er ISO-8859-1, hvis det ikke er UTF-8.
>
>> Kan oplysningen findes i de rå POST-data - og hvordan får jeg i så fald
>> fat på dem?
>
> Hvis der er en standard, er den højst sandsynligt ikke implementeret i
> MSIE 3.

Næ, men "charset=" må den da vel sende?

Tak for svaret.

--
Jonas Koch Bentzen

http://findhim.com/

Lars Dybdahl (19-03-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 19-03-03 23:05

Jonas Koch Bentzen wrote:
> Det er nok fordi, jeg ikke har den store erfaring med hex-værdier mm., men
> jeg må indrømme, jeg ikke aner, hvordan jeg skal finde ud af, om det er
> UTF-8.

Du har allerede noget kode, som giver fejl, når det er iso-8859-1 tekst.
Fang den fejl med @ foran funktionskaldet osv., og du har en
autodetektion... du behøver slet ikke tænke på, hvordan utf-8 er skruet
sammen.

> Man kunne jo også vælge bare at ignorere IE 3.

Nemlig

> Har du hørt om andre
> browsere, der giver problemer i den retning?

Nej. Måske Internet Explorer 2?

> Det er et internationalt site, der også vil få brugere fra fjernøsten, så
> jeg kan ikke bare antage, at det er ISO-8859-1, hvis det ikke er UTF-8.

Jo. Et eller andet skal det jo være, og iso-8859-1 er det bedste bud.
Alternativet er jo at melde fejl...

>> Hvis der er en standard, er den højst sandsynligt ikke implementeret i
>> MSIE 3.
> Næ, men "charset=" må den da vel sende?

Næ - hvorfor det? Tænk på, at de fleste webservere stadigvæk ikke sender
charset med ud når de leverer websider, at mange brugere stadigvæk ikke
angiver charset i deres indlæg på usenet, og at selv Outlook Express
version 6 stadigvæk ikke altid sender charset med ud på de e-mails, den
sender.

Stort set alle browsere antager, at websider uden charset angivelse er
iso-8859-1.

Hilsen,

Lars.

--
Freelance programmør
Programmering mod timebetaling

Peter Brodersen (19-03-2003)
Kommentar
Fra : Peter Brodersen


Dato : 19-03-03 23:47

On Wed, 19 Mar 2003 22:11:35 +0100, Jonas Koch Bentzen
<ingen.email@eksempel.dk> wrote:

>Næ, men "charset=" må den da vel sende?

Beklager. En søgning på "æøå" på Google sender fx i Mozilla:

==
|POST /search HTTP/1.1
|Host: www.google.com
|User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.3) Gecko/20030312
|Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,*/*;q=0.1
|Accept-Language: da,en-us;q=0.7,en;q=0.3
|Accept-Encoding: gzip,deflate,compress;q=0.9
|Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
|Keep-Alive: 300
|Connection: keep-alive
|Content-Type: application/x-www-form-urlencoded
|Content-Length: 73
|
|q=%C3%A6%C3%B8%C3%A5&ie=UTF-8&oe=UTF-8&hl=da&btnG=Google-s%C3%B8gning&lr=
==
(jeg har snydt og lavet det til et POST-request, omend Google ikke kan
håndtere det - det interessante var blot at se mine egen
HTTP-forespørgsel)

Situationen er den samme ved GET-request. Ingen informationer om
tegnsæt.

Jeg ved dog ikke om Google kun sætter de to "UTF-8"-hidden-værdier,
hvis browseren i første omgang har utf-8 med under "Accept-Charset" i
det allerførste request, der bad om form'en.

--
- Peter Brodersen

Lars Dybdahl (19-03-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 19-03-03 23:55

Peter Brodersen wrote:
> |q=%C3%A6%C3%B8%C3%A5&ie=UTF-8&oe=UTF-8&hl=da&btnG=Google-s%C3%B8gning&lr=
> Situationen er den samme ved GET-request. Ingen informationer om
> tegnsæt.

Lige netop google bruger jo ie= og oe= til at angive tegnsæt. Jeg giver dig
ret i, at der ikke er tegnsæt info i headeren, men q= parameteren
indeholder nemlig helt præcist en angivelse af tegnsæt.

Jeg bruger selv metoden på siden http://igang.dk/, hvor jeg også sender en
forespørgsel til Google i utf-8.

Lars.

--
Freelance programmør
Programmering mod timebetaling

Peter Brodersen (20-03-2003)
Kommentar
Fra : Peter Brodersen


Dato : 20-03-03 00:19

On Wed, 19 Mar 2003 23:55:12 +0100, Lars Dybdahl <lars@dybdahl.dk>
wrote:

>> |q=%C3%A6%C3%B8%C3%A5&ie=UTF-8&oe=UTF-8&hl=da&btnG=Google-s%C3%B8gning&lr=
>> Situationen er den samme ved GET-request. Ingen informationer om
>> tegnsæt.
>Lige netop google bruger jo ie= og oe= til at angive tegnsæt. Jeg giver dig
>ret i, at der ikke er tegnsæt info i headeren, men q= parameteren
>indeholder nemlig helt præcist en angivelse af tegnsæt.

Altså, ie og oe er jo bare hidden-værdier. q-værdien omhandler jo blot
input-feltet:

<input maxLength=256 size=55 name=q value="">

Der er stadigvæk ikke noget, der uden videre fra klientens side
fortæller, hvad der er blevet post'et i.

>Jeg bruger selv metoden på siden http://igang.dk/, hvor jeg også sender en
>forespørgsel til Google i utf-8.

... men du indleder, ligesom Google, også hele siden som at bruge
UTF-8.

Spørgsmålet er, hvad der vil ske, hvis man bruger en
ikke-UTF-8-kapabel browser. Man kunne jo risikere en query i stil med:

|q=%E6%F8%E5&ie=UTF-8&oe=UTF-8&hl=da&btnG=Google-s%C3%B8gning&lr=

... altså æøå blot sendt med de tilsvarende værdier i iso-8859-1. Hele
spørgsmålet er, hvordan Google kan være sikker på at inputtet er UTF-8
- specielt hvis du også altid bare sender "ie=UTF-8" med.

--
- Peter Brodersen

Lars Dybdahl (20-03-2003)
Kommentar
Fra : Lars Dybdahl


Dato : 20-03-03 01:02

Peter Brodersen wrote:
> Spørgsmålet er, hvad der vil ske, hvis man bruger en
> ikke-UTF-8-kapabel browser.

Så virker http://igang.dk/ ikke...

Lars.

--
Freelance programmør
Programmering mod timebetaling

Søg
Reklame
Statistik
Spørgsmål : 177559
Tips : 31968
Nyheder : 719565
Indlæg : 6408937
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste