<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />
Har provat med andra alternativ men NEPP, det funkar inte heller.
Lite mer info :
Båda sidornas texter ligger i MySQL databas i "text" fält med Kollationering "latin1_swedish_ci". Båda texterna skrivs ut på sidan på samma sätt via programkod.
Då båda texterna är skapade i ett CMS verktyg kan jag ta upp texterna i ett formulär, och då ser åäö helt okej ut, oavsett PC eller MAC och browser.
Jag tror att datat som kommer ur databasen är i utf8. Men enklast är kanske att html-koda datat innan det sparas i databasen. Om du har möjlighet att ändra i CMS'et så klart. Alltså så att "å" sparas som "å". Då slipper du fundera på om datat är utf8 eller iso-8859-1.
Tanken har slagit mig att just göra så, tyvärr kan ju fler tecekn bli strul + att den editor jag använder för att lättare administrera texter kommer inte att gilla det tror jag. Ska dock kolla.
Frågan kvarstår dock, VARFÖR ?
Kanske någon i alla fall kan besvara hur ett korrekt "huvud" i ett HTML sida ska se ut ?
Kanske någon i alla fall kan besvara hur ett korrekt "huvud" i ett HTML sida ska se ut ?
"huvuded" är rätt om innehållet på sidan skulle ha varit iso-8859-1, vill du tala om att innehållet på sidan är utf-8 använder du Tydals exempel. Detta gör dock ingen form av konvertering, utan talar bara om för webbläsaren vad sidan innehåller för teckenuppsättning. Så att blanda data (utf-8 från databasen och iso-8859-1 är ingen jättebra lösning). Bättre att försöka åtgärda felet.
Beroende på vad du använder för scriptspråk för att hämta data från databasen kan du givetvis konvertera från utf-8 till iso-8859-1. Eller så använder du utf-8 genomgående.
Då blev alla ÅÄÖ hel skumma där istället. Så vad är rätt ?
Återigen:
* kollar jag i MySQL databasen är det åäö.
* Även om texterna ligger i olika tabeller ligger dom i samma databas
* Jag använder samma PHP programmering, utan någon konvertering för att ta ut texten till sidan
* Huvudena i HTML är olika, men måste onekligen vara så då samma huvud ger olika åäö resultat !
Vad har du för teckenuppsättning på databasen, på den aktuella tabellen och på de aktuella fälten? Som tidigare sagt så talar det ovan (metatag) endast om för webbläsaren hur tecken ska tolkas.
Testa att köra följande direkt efter att du öppnar din anslutning mot MySQL:
mysql_query("SET NAMES utf8") or die(mysql_error());
mysql_query("SET CHARACTER SET utf8") or die(mysql_error());
Eftersom båda texterna liger i samma dtabas, fälten har båda kollationering "latin1_swedish_ci" så är det bara Tabellerna som kan skilja, men då dessa är skapade på samma sätt så är det väll frågan varför dm skulle vara olika.
( Men jag ska kolla upp det imorgon då jag sitter med grejerna framför mig. )
Men koden ovan så ställer du inte vilken teckenkodning som ska användas vid anrop till databasen, om det nu är där det blir fel. Jag kör alltid dom där på allt jag gör och har aldirg fått ett enda fel.
Nu kör jag visserligen utf-8 på databas, tabeller och fält, alltid, vad jag än gör.
Vet inte om det kan bero på detta men skapar du dina sidor i UTF-8 utan BOM (Byte order mark) och lägger på headern
header("Content-Type: text/html; charset=utf-8");
i din PHP-kod?
Annars verkar inte stödet för utf-8 vara jättestort i PHP 5 och tidigare. Varför vill du använda det istället för iso-8859-1? Visst, det är "finare" att köra på utf-8, men är de värt det med tanke på allt strul? :)
Jag bryr mig inte vad jag kör, bara åäö funkar, vilket det nu gör om jag kör ena sidan med meta-taggen och inte den andra. Men helst vill jag att 2 exakt likadana sidor ska funka lika, och inte. Vill gärna ha en förklaring hur det kan bli så.
mysql_query("SET NAMES utf8") or die(mysql_error());
mysql_query("SET CHARACTER SET utf8") or die(mysql_error());
Återigen blev åäö knas på sidan. Provade att ändra meta-taggen, men nepp!
Har nu ändrat tillbaka så åäö åter funkar.
----------
Ska nu bygga en helt ny sida och nu göra rätt från början har jag tänkt, så hur tycker ni att jag ska göra "rätt från början"?
Funkar detta ?
Databasen (fälten) :
MySQL v5.0.22
Format dynamisk
Kollationering latin1_swedish_ci
Anropet till databasen inkluderar jag dessa 2 rader
mysql_query("SET NAMES utf8") or die(mysql_error());
mysql_query("SET CHARACTER SET utf8") or die(mysql_error());
HTMLen:
Vid gennereringen skapar med PHP raden:
header("Content-Type: text/html; charset=utf-8");
början av dokumentet :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="sv">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
create table YourTable (
`id` int unsigned not null auto_increment,
`varcharField` varchar(35) character set 'utf8' collate 'utf8_unicode_ci' not null,
primary key(`id`)
) engine=myisam character set 'utf8' collate 'utf8_unicode_ci';
Öppning av databasen:
mysql_query ("set names 'utf8'");
mysql_query ("set character set 'utf8' collate 'utf8_unicode_ci'");
Det är fördelaktigt att använda utf8_unicode_ci som kollationering, då man kan växla mellan olika språk. Svenska ärver från den, liksom flera andra språk, så vid sortering på sträng-kolumner kan man specificera vilket språk det handlar om och alltid få rätt sortering (B sorteras före Å t.ex., använder man utf8_general_ci så sorteras Å före B då svenska inte ingår i kollationeringen). Om du vet att du enbart kommer hantera svenska, sätter du utf8_swedish_ci som kollationering.
Kom också ihåg att spara alla dina dokument med UTF-8 som teckenkodning! Sitter du i ett svenskt Windows brukar latin-1 vara standard, sitter du på Mac brukar Mac OS Roman (har jag för mig) vara standard.
Kom också ihåg att spara alla dina dokument med UTF-8 som teckenkodning! Sitter du i ett svenskt Windows brukar latin-1 vara standard, sitter du på Mac brukar Mac OS Roman (har jag för mig) vara standard.
Exakt. MIn erfarenhet är att det är just detta som felar eftersom man liksom inte tänker på det alls. Jobbade förresten tidigare med en php-snubbe som hade Win. Det hände ofta att filerna inte funkade och jag fick plocka upp filer han kodat och spara om dom med rätt ("dolda") charset - trots att dom hade utf-8 synligt i själva koden.