Teckenkodning och webbservrar

Här diskutera vi PHP och Webutveckling. Forumet innefattar även diskussion kring den open source mjukvara som finns i PHP exempelvis OsCommerce, Mambo, Drupal, phpBB och etc
Post Reply
larsak
Posts: 102
Joined: 6 February 2006, 07:57
Location: Lund
Contact:

Teckenkodning och webbservrar

Post by larsak » 24 April 2009, 10:43

Hejsan,

Jag läser en distanskurs från BTH just nu (webbapplikationer och databasteknik) som avhandlar grundläggande php och sql. På kursen har vi tillgång till en labbmiljö där vi kan installera och köra våra webbapplikationer. Nu har jag stött på ett ganska irriterande problem med teckenkodningen.

På mina båda datorer kör jag UTF-8 som default vilket medför att jag även sparar mina filer med den kodningen. Labbmiljön kör dock iso-8859-15 som defaultkodning vilket resulterar i att mina webbsidor visas med skräptecken istället för våra svenska vokaler. Jag har lagt till följande i html-koden:

Code: Select all

<html xmlns="http://www.w3.org/1999/xhtml" version="XHTML 1.2"  xml:lang="sv-SE"> 
<?xml version="1.0" encoding="utf-8">
samt testat att skicka med en header först i php filerna enligt :

Code: Select all

header("Content-typ:text/html; charset=utf-8");
Det senare leder till att Firefox visar sidorna korrekt medan Safari fortfarande visar skräptecken. Jag är nybörjare både på php/html och allt som har med webbservrar att göra så jag vet inte riktigt i vilken ända jag ska börja. Ligger mitt problem på serversidan, browsersidan (safari kanske är kass?) eller ska jag speca teckenkodningen på nåt annat sätt i mina filer?

Tacksam för all hjälp jag kan få!
/Lars

P.s. jag har naturligtvis ställt samma fråga på kursens forum, dock utan att få någon respons än så länge.
d.s.

erik_persson
Posts: 1474
Joined: 29 August 2002, 15:19

Re: Teckenkodning och webbservrar

Post by erik_persson » 24 April 2009, 13:39

I princip ska det räcka med det du anger. I varje fall så länge du inte också har en meta-tag som anger någon annan teckenkodning. Om en sådan finns så kan nog lite vad som helst hända beroende på vilken browser som används.
Du kan alltid testa att lägga in en meta-tag också, som i så fall ska se ut enligt:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
men jag tror inte det är det som är felet.

Du har gjort ett par fel.
1) xml-deklarationen ska föregå root-elementet, dvs inte stå efter html-tagen, och
2) en xml-deklaration har formen
<?xml version="1.0" encoding="utf-8"?>
Observera det sista "?".

Ändrar du detta så misstänker jag att det kommer att fungera.

/erik

larsak
Posts: 102
Joined: 6 February 2006, 07:57
Location: Lund
Contact:

Re: Teckenkodning och webbservrar

Post by larsak » 25 April 2009, 20:36

erik_persson wrote:I princip ska det räcka med det du anger. I varje fall så länge du inte också har en meta-tag som anger någon annan teckenkodning. Om en sådan finns så kan nog lite vad som helst hända beroende på vilken browser som används.
Du kan alltid testa att lägga in en meta-tag också, som i så fall ska se ut enligt:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
men jag tror inte det är det som är felet.

Du har gjort ett par fel.
1) xml-deklarationen ska föregå root-elementet, dvs inte stå efter html-tagen, och
2) en xml-deklaration har formen
<?xml version="1.0" encoding="utf-8"?>
Observera det sista "?".

Ändrar du detta så misstänker jag att det kommer att fungera.

/erik
Tack så mycket för hjälpen!
Det fungerar dock fortfarande inte riktigt som jag vill. Jag har nu lagt till xml-deklarationen korrekt före root-elementet i html-koden som genereras i php-filerna. Html-koden innehåller också metataggen i head-elementet som du beskrev ovan. Utöver det skickar samtliga php-filer charset med headerfunktionen. Nu hamnar jag i den spännande situationen att delar av mina sidor kodas rätt medan andra inte gör det. Dessutom varierar vilka delar som kodas rätt över tid. Antagligen beror detta på hur webbsidorna genereras:

sidhuvud, body och sidfot genreras av metoder i ett CHTMLPage-objekt som jag skrivit. Sidhuvud och sidfot är statiska och definierade i sina respektive metoder medan bodyn är dynamisk och skapas för respektive sida för att sedan skickas till printBody-metoden som argument. I nuläget blir antingen body eller sidhuvud OCH sidfot rätt kodade, vilken kombination det blir varierar som sagt mellan besöken på sidan.

Kan det bli problem om man försöker spec:a teckenkodning på olika ställen som jag angett ovan?
Jag har testat

Code: Select all

print_r(apache_response_headers());
vilket returnerar

Code: Select all

Array ( [X-Powered-By] => PHP/5.2.0-8+etch13 [Content-typ] => text/html; charset=UTF-8 ) 
vilket väl borde vara ett gott tecken? Dock säger sidinfo i Firefox fortfarande iso-8859-1 trots att vissa delar av sidan kodas korrekt....
Såna här problem får mig att alltid att undra varför nån vill köra något annat än UTF-8....

/Lars

erik_persson
Posts: 1474
Joined: 29 August 2002, 15:19

Re: Teckenkodning och webbservrar

Post by erik_persson » 26 April 2009, 15:38

Detta låter väldigt underligt. Egentligen ska det vara så att:
1) Headern specificerar dokumentets teckenkodning,
2) meta-tagen är bara ett annat sätt att ange samma information och ska egentligen inte alls behövas om teckenkodningen specificeras i headern
3) utf-8 är standard för xml

Att du får olika teckenkodning av olika delar av dokumentet är underligt. Om det är samma dokument så finns, så vitt jag vet, inte något stöd i http/html för att delar av dokumentet är kodat i en teckenkodning och andra delar i en annan!?!?

Är du HELT säker på att alla dina filer är kodade i utf-8? Det låter lite som att browsern själv försöker undersöka vilken teckenkodning som gäller och sedan väljer den som den för tillfället tycker verkar lämpligast. Vilken browser använder du? MS produkter har en tendens att skita i headers och istället undersöka själva dokumentet och baserat på vad den då finner välja en inställning - detta gäller i varje fall för MIME-typen under Content-Type, ex anges text/plain för ett dokument som har formen av ett html-dokument så renderar IE informationen som text/html.

/erik

larsak
Posts: 102
Joined: 6 February 2006, 07:57
Location: Lund
Contact:

Re: Teckenkodning och webbservrar

Post by larsak » 26 April 2009, 20:47

erik_persson wrote:Detta låter väldigt underligt. Egentligen ska det vara så att:
1) Headern specificerar dokumentets teckenkodning,
2) meta-tagen är bara ett annat sätt att ange samma information och ska egentligen inte alls behövas om teckenkodningen specificeras i headern
3) utf-8 är standard för xml

Att du får olika teckenkodning av olika delar av dokumentet är underligt. Om det är samma dokument så finns, så vitt jag vet, inte något stöd i http/html för att delar av dokumentet är kodat i en teckenkodning och andra delar i en annan!?!?

Är du HELT säker på att alla dina filer är kodade i utf-8? Det låter lite som att browsern själv försöker undersöka vilken teckenkodning som gäller och sedan väljer den som den för tillfället tycker verkar lämpligast. Vilken browser använder du? MS produkter har en tendens att skita i headers och istället undersöka själva dokumentet och baserat på vad den då finner välja en inställning - detta gäller i varje fall för MIME-typen under Content-Type, ex anges text/plain för ett dokument som har formen av ett html-dokument så renderar IE informationen som text/html.

/erik
:oops:
Nu har jag löst det, som du misstänkte så var inte alla filer UTF-8 kodade utan den filen som innehåller klasserna var ISO-8859-1-kodad. Antagligen har jag missat att konvertera tillbaka den i något läge, har experimenterat en del med iconv som lösning på det här problemet.

Ifall någon annan med liknande problem läser den här tråden rekommenderas varmt följande kommando:

Code: Select all

file -i *
Gött att det ordnade sig, som vanligt har man blivit lite klokare på vägen!
/Lars

larsak
Posts: 102
Joined: 6 February 2006, 07:57
Location: Lund
Contact:

Re: Teckenkodning och webbservrar

Post by larsak » 26 April 2009, 23:14

...och så var problemet tillbaka igen. Fast nu är det hela sidan som till och från kodas fel. Jag begriper inte vad detta beror på, har kört sidan genom w3s validator och den klarar sig nu (även undersidorna) encoding detekteras utan problem som utf-8 där. Jag använder Firefox (3.0.6) och safari (3.2.1) och problemet är identiskt i båda.

/Lars

larsak
Posts: 102
Joined: 6 February 2006, 07:57
Location: Lund
Contact:

Re: Teckenkodning och webbservrar

Post by larsak » 27 April 2009, 10:15

Och så ytterligare lite fortsättning då:

Nu har jag delvis släppt frågan med själva webbsidan och börjat titta på mina broswers istället. Det visade sig att både safari och firefox på min macbook hade iso-8859-1 som default charset. Har ändrat det till utf-8 nu och då funkar även min webbsida. Jag tolkar detta som att browsern inte förstår den kodningsinformation som skickas av servern/sidan utan faller tillbaka på sin defaultkodning vilket i sin tur antagligen betyder att jag gör något galet i koden. Detta irriterar mig speciellt eftersom kodningen identifierades korrekt av w3s validator. Fortsättning följer....

/Lars

User avatar
mach25
Posts: 31
Joined: 5 August 2003, 02:13
Location: Stockholm
Contact:

Re: Teckenkodning och webbservrar

Post by mach25 » 27 April 2009, 22:00

Kolla att du har stavat rätt i header anropet, i dina tidigare inlägg har du skrivit "Content-typ:" och det ska vara "Content-Type:".
--=Mach 25=--
Gentoo Linux

erik_persson
Posts: 1474
Joined: 29 August 2002, 15:19

Re: Teckenkodning och webbservrar

Post by erik_persson » 27 April 2009, 22:25

Underligt.

Testa följande sidor:
http://www.djingis.se/~ep/removelater/utf8.php (Content-Type: application/xhtml+xml; charset=utf-8, <?xml ... encoding="utf-8"?> )
http://www.djingis.se/~ep/removelater/iso88591.php (Content-Type: application/xhtml+xml; charset=iso-8859-1, <?xml ... encoding="iso-8859-1"?> )
http://www.djingis.se/~ep/removelater/utf8-2.php (som ovan fast med content... text/html)
http://www.djingis.se/~ep/removelater/iso88591-2.php (som ovan fast med content... text/html)

De fungerar invändingsfritt på min firefox! (Det enda lustiga är att om man skickar med "Content-Type: application/xhtml+xml ..." så kan man inte senare välja teckenuppsättning själv)

/erik

larsak
Posts: 102
Joined: 6 February 2006, 07:57
Location: Lund
Contact:

Re: Teckenkodning och webbservrar

Post by larsak » 28 April 2009, 08:29

Åter igen - tack så mycket!

Mach-25, skarpsynt! Visst hade jag stavat fel till "content-type", och rättstavat har jag återigen svenska tecken. Det verkar också ha löst det problem som Erik påpekade via PM att servern skickade dubbla headers med content-type. Gissningsvis har servern som default att skicka en header enligt

Code: Select all

Content-Type:text/html; charset=iso-8859-1
om inget annat anges. Eftersom http-headers har prioritet över xml verkar det inte spela så stor roll vilken xml-deklaration som sedan finns i det skickade dokumentet. Uppenbarligen gäller detta även meta-taggen? Inte helt oväntat verkar problemet alltså ha varit ett klassiskt fall av SBS. Men men, jag har lärt mig en massa saker vilket alltid är bra.

Tackar så mycket för visat intresse.
/Lars - som hoppas att han slipper uppdatera den här tråden mer nu....

Post Reply