Välkommen till linuxportalen.se!

Linuxportalen.se är Sveriges största och aktivaste webbplats för användare av öppen- och fri programvara.

Du besöker Linuxportalen.se som gäst vilket begränsar din möjlighet att använda webbplatsens alla funktioner. Genom att registera dig som medlem får du inte bara möjlighet att söka bland webbplatsens innehåll, skapa nya och delta i befintliga diskussioner, skapa din egen blogg, kommunicera med andra medlemmar genom privata meddelanden och delta i omröstningar. Du får också tillgång till Veckans Kadavro - en seriestrip unikt skapad för Linuxportalen.se!

Registeringen sker snabbt och är helt kostnadsfri - tveka inte, bli medlem idag!

Teckenkodningsproblem igen - ÅÄÖ på webben

Håller på att bli alldeles knasgalen igen (trots dotra's muntra tillrop att "man kan inte bli det man.. " ja ni vet...)
Det är det här med teckenkodning som ju blivit ett he..te sedan utf infördes. (Ska avhålla mig från Allmänt UTF-hat-tirader, behöver få detta att fungera nu bara.)
Frågan är helt enkelt hur jag ska få åäö rätt överallt och oberoende av vilken dator man kör ifrån?

Detaljer:
Jag har skapat ett litet medlemsregister i php, lagras i mysql och hanteras via webben.
Egen webbserver med OpenSuse 11.4, apache & mysql
Utskrift av adressetiketter görs med fpdf med tillägget Labels
Webbserverns & min arbetsdators locale =sv_SE.UTF-8

Jag har prövat med att skapa databasen med "CHARACTER SET utf8 COLLATE utf8_swedish_ci" och sätta "charset=utf-8" på webbsidorna. Då ser det rätt ut i min webbläsare, men loggar jag in i mysql är åäö förvrängda. Utskrifter blir också fel.

Skapar jag databasen med "CHARACTER SET latin1 COLLATE latin1_swedish_ci" och sätter "charset=iso-8859-1" på webbsidorna ser det fortfarande rätt ut i min webbläsare, men fel i mysql (dock andra tecken för åäö än med utf-8)
Utskriften blir lika fel.

Jag har även lagt upp allt på en annan server Ubuntu 8.04.2LTS, locale en_US.UTF-8 men det blir precis likadant.

Så hur gör jag? Det måste bli rätt överallt -... och de som kommer använda medlemsregistret kör ju i regel Windows förstås...

Alternativ för kommentarvisning

Välj ditt önskade sätt att visa kommentarerna och klicka på "Spara" för att verkställa dina ändringar.

FoHs bild

På vilket sätt loggar du in i MySQL? Via ett webbgränssnitt eller via kommandoprompten, eller via MySQL Administrator etc? Kan du testa flera metoder och se hur det fungerar?

Är du säker på att inputen är i UTF8? Hur gör du inputen? Har du satt PHP-scriptet till att köra UTF8?

pingus bild

Jag loggar in i MySQL via kommandoprompten.
Kontroll av MySQL:s kodning:

mysql> show create database fmnuppsala;
+------------+---------------------------------------------------------------------------------------------+
| Database   | Create Database                                                                             |
+------------+---------------------------------------------------------------------------------------------+
| fmnuppsala | CREATE DATABASE `fmnuppsala` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_swedish_ci */ |
+------------+---------------------------------------------------------------------------------------------+

mysql> SELECT CHARSET(USER());
+-----------------+
| CHARSET(USER()) |
+-----------------+
| utf8            |
+-----------------+

Egentligen struntar jag i hur det ser ut i mysql-cli, men måste vara rätt på skärm & utskrift.
Jag har matat in data dels via webb-script, php/html satt till utf-8, dels direkt i mysql-cli.
Det inmatade via webbformulär blir rätt på skärm, Firefox satt till utf-8.
Det inmatade via mysql-cli blir fel på skärm - alldeles oavsett vilken kodning jag väljer!
I ingendera fall blir det rätt på utskrift.

PHP har ju ingen kodning i sig om jag inte missuppfattat något grovt? Men all html är satt till utf-8.

Kan det vara något tok i utskriftsfunktionen? Hittade detta i "fpdf.php" som alltså sköter själva utskriften:
function SetSubject($subject, $isUTF8=false)
{
    // Subject of document
    if($isUTF8)
        $subject = $this->_UTF8toUTF16($subject);
    $this->subject = $subject;
}

Upprepat då för all text - title, header, subject mm

(Edit: [code] funkar fortfarande inte, suck... )

Edit 2: Tillägg:
Jag har alltså även prövat sätta all kodning till latin-1 / iso-8859, blir fortfarande fel på utskriften.

----------------------------
In Pingvino veritas!

http://www.tuxit.se
http://blogg.skuttungecity.se

pingus bild

HA! Löst!

Jag tog till Den Ultimata Nödlösningen: "läs manualen"...

Jag har ju alltså hämtat utskriftsfunktionen på nätet, gick till fpdf.org och läste deras FAQ...
(Och jo, jag känner mig lite fånig...)

Lösningen då:

  • 7. Accented characters are replaced by some strange characters like é.

    Don't use UTF-8 encoding. Standard FPDF fonts use ISO-8859-1 or Windows-1252. It is possible to perform a conversion to ISO-8859-1 with utf8_decode():

    $str = utf8_decode($str);

    But some characters such as Euro won't be translated correctly. If the iconv extension is available, the right way to do it is the following:

    $str = iconv('UTF-8', 'windows-1252', $str);

----------------------------
In Pingvino veritas!

http://www.tuxit.se
http://blogg.skuttungecity.se