Teckenkodning Pa Webben Pt 2

  • View
    3.788

  • Download
    1

Embed Size (px)

DESCRIPTION

In Swedish. En genomgång av hur man behöver förhålla sig till och kan styra upp sin teckenkodning i en LAMP-miljö

Text of Teckenkodning Pa Webben Pt 2

  • 1. Teckenkodning p webben praktiska exempel, del 1 Lars Gunther, Keryx
      • En genomgng av hur man behver frhlla sig till och kan styra upp sin teckenkodning i en LAMP -milj

2. Disclaimer

  • PHP version 6 r fortfarande under utveckling och somliga detaljer diskuteras livligt bland utvecklarna.
  • Se allt om PHP 6 i denna presentation (gjord januari 2007) som prognoser inte ngra lften!
  • Detta r en tidig alfa-version av fredraget. Det r nnu inte klart p ngot stt.

3. Terminologi: en vg genom ett frvillat landskap del 1

  • Glyfer
    • Eng: glyph
  • Tecken
    • Eng: character
  • Repertoar
    • Eng: Character repertoire
    • En uppsttning tecken, en mngd. Utan ordning.
    • Character set (frsta, men ovanliga, betydelsen)
  • Teckentabell
    • Eng: Character code
    • Varje tecken har sin code position,code point , code number, code element, code set value eller rtt och sltt code
    • Character set (andra betydelsen)
    • Repertoar (en andra felaktig betydelse): Delsumma av en teckentabell

4. Terminologi: en vg genom ett frvillat landskap del 2

  • Teckenkodning
    • Den sekvens nollor och ettor som representerar ett tecken.
    • Tack vare detta kan textlagrasochfrmedlas .
    • P webben frekommer lagring och frmedling!
    • Character set tredje och vanligaste betydelsen
      • charset som HTTP-huvud
      • Instllningar i Apache, MySQL, etc.
  • Font
    • Tack vare dessa kan tecken visas p skrm eller skrivas ut
    • Styrs via CSS idag, lmnas drhn idettafredrag

5. Teckenkodning: ASCII, ISO, ANSI och UTF-8

  • US-ASCII 7 bit per tecken. Bara engelska.
  • ISO-8859-1 8 bit per tecken
    • Tecken 0-127 identisk med US-ASCII
  • Windows 1252 (ANSI)
    • Bygger p Latin 1/ISO-8859-1, men anvnder intervallet 128-159 (Hex 80-9F)
    • Konsekvens: Tecken 0-127 identisk med US-ASCII
  • UTF-8 (Unicode Transformation Format 8 bitars)
    • Tecken 0-127 identisk med US-ASCII (en byte per tecken)
    • Drefter flexibelt antal bytes (minimum 2) per tecken

6. verkodning skicka alla tecken som vore de ASCII, men nd inte

  • Problemet: Det verliggande protokollet (IMAP, SMTP, FTP, etc) klarar bara ASCII
    • Nrliggande: Du vill skicka binr data genom ett system gjort fr text.
    • Nrliggande: Du vill kunna skicka sdana tecken som normalt r styrkoder, som tryckbara: Null, beep, line-feed
    • Fara: Styrkoder kan slinka igenom och skapa SQL-injektion, XSS, etc.
  • Exempeltext:
      • abc 123 +/=;
  • application/x-www-form-urlencoded.
    • FrURL:er
      • abc+123+%E5%E4%F6+%C5%C4%D6+%2B%2F%3D%3B
    • RFC1738 (erstter + med %20)
      • abc%20123%20%E5%E4%F6%20%C5%C4%D6%20%2B%2F%3D%3B

7. verkodning, forts.

  • Quoted printable.
    • Frn ISO till ASCII
    • Ursprunglig lsning fr , etc.i mejl.
      • abc 123 =E5=E4=F6 =C5=C4=D6 +/=3D;
  • UTF-7.
    • Frn UTF till ASCII.
    • Anvnds i moderna mejlsystem, ssom IMAP.
      • abc 123 &5eT2- &xcTW- +/=;
  • Base-64.
    • Lmplig fr binr data.
    • Du kan infoga ett objekt i HTML-koden!
      • YWJjIDEyMyDl5PYgxcTWICsvPTs=

8. Kollationering

  • Kollationering = arrangera i ordning
  • Beror p sprket och kan inte lsas bara med teckenkodningen
  • Beror dessutom p specifika variationer (territoriet)
  • Ex. Svensk svenska kontra finsk svenska
  • http://en.wikipeda.org/wiki/Locale
  • http://en.wikipedia.org/wiki/Collating_sequence

9. Anvndningsplatser 10. I webblsaren 11. Hur webblsaren tolkar HTML

  • Om det finns ett HTTP-huvud, anvnd det:
    • Vanligtvis: Content-type. Ex. text/html; charset=iso-8859-15
    • OBS! Om Content-type anges, men utan charset, s anses den vara satt till default och drmed nd angiven!
  • Om teckenkodningen anges med enByte Order Mark(BOM), anvnd den.
    • Detta gller bara Unicode-varianter, ssom UTF-8
    • PHP, och andra tekniker, fungerar inte med BOM. Anvnd inte BOM!!!
  • Titta p meta-elementet i HTML-koden
    • Krver att teckenkodningen r ASCII-kompatibel
  • Default: iso-8859-1

12. Hur webblsaren tolkarktaXHTML

  • Vad menas?
    • Data snd som application/xhtml+xml
    • Filndelsen xhtml
    • Internet Explorer kan inte XHTML!
  • HTTP-huvud
  • BOM
  • Titta p XML-prologen
  • Default: UTF-8

13. Hur webblsaren tolkar CSS eller JavaScript

  • Tittar frst p HTTP-huvudet, likt (X)HTML
  • CSS har @charset
  • JavaScript anvnder alltid Unicode internt
    • Strngar lagras somcode points , inte med en enskild kodning!
    • Oavsett teckenkodningen p sidan eller skriptet

14. Apache och teckenkodning

  • Direktiv
    • addDefaultCharset= Vilken teckenkodning skall anvndas nr MIME-typen rtext/plainellertext/html
      • off = funktionen avstngd
      • on = iso-8859-1
      • Ange annars namnet p teckenkodningen
    • addCharset= Koppla till filndelse
      • addCharset EUC-JP .euc
      • addCharset iso-8859-1 .xhtml
  • OBS! Nr apache kallar ngot encoding, s menasinteteckenkodning, utan om informationen skall skickas komprimerad (ex. gzip) eller ej.

15. Apache och teckenkodning, forts

  • Kontext
    • Hela servern httpd.conf
    • Per virtuell server
    • Per katalog
    • .htaccess
      • Den jag som kund p ett webbhotell kan styra
    • Per skript med PHP (vi terkommer till det)
  • Enklaste sttet att styra upp via .htaccess
      • AddDefaultCharset iso-8859-1

16. Frn webblsaren 17. Vilken kodning som skickasfrnwebblsaren

  • Normalt: Samma som sidan i sig har som teckenkodning.
  • Angiven som parameter i
  • Indatakontroll krvs p serisa applikationer
    • Teckenkodningen kan i sig stlla till med strul
    • Teckenkodningen kan maskera andra attacker
    • Det r inte ens skert du fr din data frn en webblsare!
  • Konvertering kan krvas

18. PHP internt 19. PHP internt idag (PHP 4 och 5)

  • ISO-8859-1 frutstts med visst std fr unicode

Bild frn:http://phuson.com/v2/article/php-and-unicode-fun(CC) 20. PHP internt idag, forts.

  • Strngfunktionerna: en byte per tecken
    • Om de inteverladdas
    • Men det gericke-portabelkod
  • mb_string
    • Enkelt fel: Att inte anvnda mb_strlen()

21. PHP internt idag, forts.

  • XML-funktionerna defaultar till UTF-8
    • Logiskt fr XML
    • Andra teckenkodningar mste konverteras innan de skickas till XML-funktionerna

22. Konverteringsfunktioner

  • utf8_encode
    • Frn iso till UTF-8
  • utf8_decode
    • Frn UTF-8 till ISO
  • iconv
    • Till