Joomla! er 'ud af boksen' UTF-8 baseret - dvs. det understøtter alle tænkelige tegn i alle tænkelige situationer. Så: Slut med underlige æ-ø-å og lignende.
MEN Hvad så når man har nogen hjemmestrikkede / ældre / andre systemer som IKKE bruger UTF-8. Dét kan give nogen udfordringer.

Det har taget lang tid, men langt om længe er det lykkedes at få orden på vores egne databaser... Du kan måske bruge lidt af mit arbejde!?

Her er et par nyttige tips og links!

Der er 3 trin involveret
Denne artikel 'Does your PHP/MySQL app speak Unicode?' giver dels en god intro til Unicode (== UTF-8) tegnsæt, og dels et overblik over de 3 elementer der indgår i at skifte fra 'almindelige' latin tegnsæt til UTF-8.

1: Din database skal være med UTF-8 tegnsæt og sortering

Hvad er UTF-8 ? Det er et kodesæt som med op til 4 bytes kan gemme en entydig værdi for alle kendte grafiske tegn. Vores databaser kører på MySql, og du kan via dette link se en oversigt over sorteringsorden for tegnsæt for forskellige lande - herunder UTF-8 dansk.
Især pointen med at der er tegnsættet (indlysende) og sortering (ikke lige så indlysende) er ret så vigtig!

Da en af udfordringerne var at vores eksisterende data lå i tabeller der IKKE var UTF-8, var der god hjælp at hente via denne side: MySQL and UTF-8 som via en .phph script hjælper med at konvertere databaser og felter.

I den sidste ende blev det dog:
  1. dump databasen i SQL format (inkl. create statements)
  2. åben i editor (brug f.eks. notepad++ der kan vise indhold i UTF-8 format)
    1. ret alle create statements med tegnsæt og sortering
    2. søg-og-erstat de 'almindelige' danske specialetegn
  3. slet tabellerne i din database (husk backup først)
  4. paste hele det tilrettede eksport dump i SQL vindue på serveren og kør
Det gik selvfølgelig kun frdi det trods alt var begrænsede datamængder. Ellers er scriptet ovefor vejen frem..

2: Dine hjemmesider skal være i UTF-8 format

Nemt for os der kører med Joomla! Ellers - når du er på siden, så brug browseren til at vise information om siden, og se hvilket tegnsæt der bruges.. Alternativ så vis sidens kildetekst - og hvis i toppen finder noget lignende:

<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
Hvis det er noget du bare ændrer, så vær forberedt på at du skal rette i tekster på siden!

3: Din forbindelse skal køre UTF-8

Det var her det gik mest galt for mig, da dette var årsagen til at jeg trode jeg havde lavet fejl alle mulige andre steder... (OK - sortering var heller ikke helt ligetil)

Vores programmer og Joomla! afvikles som .php script mod en MySQL database. Når der skal læses / skrives data, så starter det med at man logger på databasen, og vælger den tabel der skal læses.
Denne forbindelse - mellem php-server og database-server - kan åbenbart køre med sit eget tegnsæt - og selvom browseren kører UTF-8 og databasen er i UTF-8 format, så er det absolut IKKE givet at forbindelsen er.

Helt konkret kan du læse lidt mere (spredt) info om problemet på disse sider:

MySQL + UTF-8 = Not So Obvious

UTF8, PHP and MySQL

mysql_client_encoding

I min kode ser resultatet sådan her ud:

function sql($statment,$assoc=1)
{
   
    global $Translation;
    global $dbServer, $dbUsername, $dbPassword, $dbDatabase;
   
        /****** Connect to MySQL ******/
        if(!extension_loaded('mysql')){
            echo "
ERROR: PHP is not configured to connect to MySQL on this machine. Please see this page for help on how to configure MySQL.
";
            exit;
        }

        if(!mysql_connect($dbServer, $dbUsername, $dbPassword)){
            echo StyleSheet() . "\n\n
";
            echo $Translation["error:"] . mysql_error();
            echo "
";
            exit;
        }
        /****** Select DB ********/
        if(!mysql_select_db($dbDatabase)){
            echo StyleSheet() . "\n\n
";
            echo $Translation["error:"] . mysql_error();
            echo $Translation["if you haven't set up"];
            echo "
";
            exit;
        }
        /****** Set client characterset * MySQL5.0.7+ *******/
/*        if(!mysql_set_charset('utf8')){
            echo StyleSheet() . "\n\n
";
            echo $Translation["error:"] . mysql_error();
            echo $Translation["if you haven't set up"];
            echo "
";
            exit;
        } */
       
        // FJA: initiering af UTF-8 på forbindelsen
       
        if(!mysql_query('SET NAMES utf8;')){
            echo StyleSheet() . "\n\n
";
            echo $Translation["error:"] . mysql_error();
            echo $Translation["if you haven't set up"];
            echo "
";
            exit;
        }
        if(!mysql_query('SET CHARACTER SET utf8;')){
            echo StyleSheet() . "\n\n
";
            echo $Translation["error:"] . mysql_error();
            echo $Translation["if you haven't set up"];
            echo "
";
            exit;
        }

Comments powered by CComment