[Webb] Teckenkodning genom hela kedjan

Permalänk
Medlem

[Webb] Teckenkodning genom hela kedjan

Hej! Skulle vilja ha lite hjälp med teckenkodning, får det inte riktigt rätt.

Jag hade ISO-8859-1 först och allt såg bra ut på hemsidan och i MySQL-databasen som är inställd på latin1_swedish, men sedan när jag kollade på ett mailutskick från databasen så blev några tecken konstiga, även fast jag specificerat ISO-8859-1 i mailet. Provade byta till utf-8 och det blev bättre i mailet, men konstigt på andra ställen.

Så jag undrar egentligen om jag ska satsa på ISO-8859-1 eller utf8 och hur jag ska ställa in dessa saker:

  • Vad ska jag har för charset på html-dokumentet med formuläret som matar in i databasen?

  • Ska jag ha någon speciell header i php?

  • Vad ska jag sätta för kodning på databasen?

  • Ska jag manipulera datan på något sätt när jag stoppar in den i databasen?

  • Ska jag manipulera datan på något sätt när jag hämtar ut den från databasen?

  • En del av det jag stoppar in i databasen görs med ett TinyMCE-fält och ö blir alltså automatisk ö, ska jag behandla dessa på något annat sätt än de vanliga textfälten?

  • Vad ska jag sätta för charset i mailen som skickas ut?

  • Jag skickar ut html-formaterade mail, ska jag därför konvertera svenska tecken till html-koder innan jag skriver in dem i i mailet?

  • Såg någonting om att specifiera charset i en mysql_query varje gång man ansluter till databasen, kan det vara något?

  • Vilken information som helst som kan vara till nytta för mig...

I övrigt så har jag noterat att t.ex. sweclockers är kodat i ISO-8859-1 och även skickar ut sina mail med den utan problem, så jag antar att det går att få att fungera på ett eller annat sätt

Tacksam för all hjälp!

Permalänk
Inaktiv

Du ska använda UTF-8 överallt, i databas anslutningen, i databas tabellerna (Coallationen ska vara utf8_swedish_ci eller general_ci), koda dina dokument i UTF-8 och använd en UTF-8 meta tag i ditt HTML dokument.

Permalänk
Medlem

Finns det någon speciell anledning till varför utf8 är att rekommendera? Någon som har lite bra läsning på ämnet? Och är det någon som har ett tips på hur jag ska hantera vanliga textfält jämfört med de som formateras som html?

Permalänk
Medlem
Permalänk
Medlem

Tack för svaren, verkade som att allt i hela kedjan fungerar nu när jag satt utf8-kodning på allt.

En konstig sak hände dock som jag undrar över. När jag läste runt lite på nätet så märkte jag att många rekommenderade att lägga till detta efter databasanslutningen:

mysql_query("SET NAMES utf8");

Men när jag gjorde detta så blev alla tecken konstiga igen, även fast de redan var i utf8 på alla ställen. Någon som kan förklara det?

Jag undrar även om det är rekommenderat att i skriva ä istället för ä etc. i html-filerna? Det verkar ju som att man får samma resultat i vilket fall, men finns de någon för- eller nackdel med någon av skrivsätten?

Permalänk
Inaktiv

Anledningen till att du får konstiga tecken är för att MySQL databasen inte konverterar innehållet i databasen automatiskt, antingen får du skriva om det eller konvertera det i tex. Notepad++

En fördel med UTF-8 är till exempel att du ska slippa ä etc.

Permalänk
Medlem

UTF-8 hela vägen är klart att föredra precis som havsmonstret skriver. Ska du även ändra teckenkodning i databasen så se till att allt är sparat i en viss teckenkodning sedan innan. Jag råkade själv ut för ett problem där en databas vars dump var ungefär 5-6MB hade innehåll i både ISO-8859-1 och i UTF-8. Det var ju måttligt kul att manuellt behöva gå igenom den för att ändra vissa specialtecken så som é och è.

Visa signatur

Efter att ni har läst det här har ni insett att det inte gav något.

Permalänk
Medlem
Skrivet av anon150287:

Anledningen till att du får konstiga tecken är för att MySQL databasen inte konverterar innehållet i databasen automatiskt, antingen får du skriva om det eller konvertera det i tex. Notepad++

En fördel med UTF-8 är till exempel att du ska slippa ä etc.

Fast saken är den att jag redan har konverterat allting i databasen. Mina dokument är konverterade till utf8 utan BOM, jag sätter utf8 som header i php och html, min databas är konfigurerad för utf8 och allt tidigare innehåll har jag plockat ut och kört utf8_encode() på. Som sagt så fungerar detta fint som det är nu. Vad jag undrade var ju helt enkelt varför de blev konstiga igen när jag lade till mysql_query("SET NAMES utf8");, den borde vill inte ändra på något om mitt innehåll redan är i utf8?

Det är ju egentligen inget problem då allt fungerar som det ska utan den raden, utan jag var mest nyfiken på varför den raden ställer till det igen

Skrivet av Kuufukuji:

UTF-8 hela vägen är klart att föredra precis som havsmonstret skriver. Ska du även ändra teckenkodning i databasen så se till att allt är sparat i en viss teckenkodning sedan innan. Jag råkade själv ut för ett problem där en databas vars dump var ungefär 5-6MB hade innehåll i både ISO-8859-1 och i UTF-8. Det var ju måttligt kul att manuellt behöva gå igenom den för att ändra vissa specialtecken så som é och è.

Varför loopade du inte bara genom allt innehåll och körde utf8_encode() på det?

Permalänk
Medlem
Skrivet av Apro:

Varför loopade du inte bara genom allt innehåll och körde utf8_encode() på det?

Saken var att det inte räckte. Försökte jag konvertera allt till UTF-8 "förstördes" några tecken, försökte jag konvertera allt till ISO-8859-1 "förstördes" några andra tecken istället.

Det enklaste blev då faktiskt att gå igenom manuellt och ändra. Det handlade ändå bara främst om é och è vilket bara fanns i en tabell (dock fortfarande på drygt 200 rader). Shit happens

Visa signatur

Efter att ni har läst det här har ni insett att det inte gav något.