webForumDet fria alternativet

ÅÄÖ strul

17 svar · 1 322 visningar · startad av Mr T

Mr TMedlem sedan maj 20071 061 inlägg
#1

Har dessa 2 sidor :
http://www.axplock.com/
http://mariasfyndbod.axplock.com/

Dom har samma början

<!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.

Var ligger felt ?

JojoxxMedlem sedan juni 20004 308 inlägg
#2

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.

Mr TMedlem sedan maj 20071 061 inlägg
#3

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 ?

tydalMedlem sedan juni 20034 013 inlägg
#4

Mr T skrev:

Kanske någon i alla fall kan besvara hur ett korrekt "huvud" i ett HTML sida ska se ut ?

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

JojoxxMedlem sedan juni 20004 308 inlägg
#5

Mr T skrev:

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.

Mr TMedlem sedan maj 20071 061 inlägg
#6

tydal skrev:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Det gjorde susen ! Ett jättetack.

Kör nu följande huvud :

<!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" />

Mina funderingar över varför den ena sidan funkar utan, och den andra med kvarstår dock. Varför blir det som det blir ?

(Att lösa ett fel är bra, att förstå varför fel uppkom är bättre!)

Mr TMedlem sedan maj 20071 061 inlägg
#7

Nu fattar jag inget !
Provade att köra

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

istället för

<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />

https://www.axplock.com (som ju redan funkade men .... )

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 !

???????

MickeA.comMedlem sedan feb. 20034 441 inlägg
#8

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());
Mr TMedlem sedan maj 20071 061 inlägg
#9

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. )

MickeA.comMedlem sedan feb. 20034 441 inlägg
#10

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.

Mr TMedlem sedan maj 20071 061 inlägg
#11

Följande data står det om tabellen för http://mariasfyndbod.axplock.com/

MySQL v5.0.22
Format	dynamisk
Kollationering	latin1_swedish_ci

och för
http://www.axplock.com/ är det samma

MySQL v5.0.22
FFormat	dynamisk
Kollationering	latin1_swedish_ci

Så mysteriet kvarstår, varför måste jag ha

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

på ena siten men inte den andra.

Ska dock börja använda den där kodsnutten så man är säker på vad man får ut från databasen.

liljaMedlem sedan juli 20041 183 inlägg
#12

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? :)

Mr TMedlem sedan maj 20071 061 inlägg
#13

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å.

Mr TMedlem sedan maj 20071 061 inlägg
#14

Provade på http://mariasfyndbod.axplock.com/ med MickeA.com;s tipps, nämligen att köra

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" />

Vad tror ni ? Hur brukar ni göra ?

SPiNMedlem sedan mars 20007 896 inlägg
#15

Databas:

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'");

Rätt header till klienten:

header ("Content-Type: text/html; charset=UTF-8");

Meta-tagg i dokumentet (ej nödvändigt):

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

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.

Danne VMedlem sedan aug. 20068 090 inlägg
#16

SPiN skrev:

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.

Mr TMedlem sedan maj 20071 061 inlägg
#17

Super. Tack för bra förklaring och exempel. (har ju inte provat allt än, men det ser ju bra ut :-)

SPiNMedlem sedan mars 20007 896 inlägg
#18

En sak till att tänka på är att ange rätt kollationering när man ska sortera, gruppera eller matcha värden i en tabell.

Sortering:

select
    `varcharField`
from
    YourTable
order by
    `varcharField` collate 'utf8_swedish_ci'

Gruppering:

select
    `varcharField`
from
    YourTable
group by
    `varchar` collate 'utf8_spanish_ci'

Matchning:

select
    `varcharField`
from
    YourTable
where
    cast(`varcharField` as char character set 'utf8') collate 'utf8_czech_ci' = 'Matching string'
137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)