Permalänk
Medlem

Å Ä och Ö i php/mySQL

Hej!

Jag försöker hämta data från min databas (lokal server på datorn) men när den presenteras så blir alla å ä och ö till frågetecken i en "ruter". Jag förstår att det har att göra med kodningen men jag hittar inte vart felet ligger.

I php-filen har jag texten:

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

Öppnar jag min php-fil i anteckningar och väljer "Spara som" så står det att kodningen är utf-8. När jag tittar på min tabell i databasen i myphpAdmin så presenteras åäö precis som de ska. Jag har varit in och tittat på variabler i myphpAdmin och där har jag följande:

character set client utf8 (Globalt värde) latin1 character set connection utf8 (Globalt värde) latin1 character set database latin1 character set filesystem binary character set results utf8 (Globalt värde) latin1 character set server latin1 character set system utf8 character sets dir c:\wamp\bin\mysql\mysql5.1.53\share\charsets\ collation connection utf8_general_ci (Globalt värde) latin1_swedish_ci collation database latin1_swedish_ci collation server latin1_swedish_ci

Det verkar ju finnas väldigt många olika platser man kan göra fel på har jag märkt. Är det någon som ser vart jag har missat? Jag håller på att bli helt tokig nu. Har suttit i timmar och sökt på internet men inget verkar fungera.

Permalänk

använd 8859-1 istället för utf-8

Permalänk
Inaktiv
Skrivet av spot_1337:

använd 8859-1 istället för utf-8

Nej, nej och åter nej.
Finns ingen anledning att inte använda UTF-8.

De saker jag kan tänka på som kan hjälpa dig är:

Ändra din DOCTYPE till <!doctype html> och ändra dina två meta taggar till <meta charset="utf-8">.
Spara sedan om dina filer som UTF-8 (utan BOM), vilket du redan verkar ha gjort.
För databasen kan du ändra coallationen till förslagsvis till utf8_general_ci, men de flesta utf8 ska fungera bra.

Permalänk
Medlem

Jo, jag har ju php-filen sparad i utf-8 precis som det är tänkt. Provade med ditt förslag havsmonstret fast utan resultat :/. Längst upp i filen står det också

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

vilket jag bara kopierat från någon guide. Jag fattar egentligen inte vad det betyder :P.

Men eftersom all vanlig html-text formateras precis som den ska på resten av sidan så borde det väl inte vara fel i koden högst upp på filen? Det är just när jag extraherar datan från databasen och sedan presenterar den som det blir fel.

Permalänk
Inaktiv

Nä, det är nog fel på databasen. Men om du inte riktigt vet vad doctypen för XHTML innebär finns det ingen anledning att använda den, använd då hellre den för HTML5:

<!doctype html>

Med det kan du även byta ut

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

mot

<meta charset="utf-8">

och lägga till lang="sv" på din html tag:

<html lang="sv">

Kan du göra en export av din databas så man kan ta en titt på den?

Permalänk
Medlem

Ok, tackar för det tipset. Så jag kan byta ut

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> <meta http-equiv="Content-Language" content="sv" />

mot helt enkelt:

<!DOCTYPE html> <html lang="sv" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8">

?

Jag bifogar databasen nedan. Jag ser nu att när jag exporterar databasen så fungerar det inte heller med åäö:

-- phpMyAdmin SQL Dump -- version 3.3.9 -- http://www.phpmyadmin.net -- -- Värd: localhost -- Skapad: 24 juli 2011 kl 19:43 -- Serverversion: 5.1.53 -- PHP-version: 5.3.4 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Databas: `ovvo` -- -- -------------------------------------------------------- -- -- Struktur för tabell `avskjutning_tot` -- CREATE TABLE IF NOT EXISTS `avskjutning_tot` ( `jaktlagID` int(11) NOT NULL AUTO_INCREMENT, `Jaktlag` varchar(100) CHARACTER SET latin1 DEFAULT NULL, `Tjur` int(11) DEFAULT NULL, `Ko` int(11) DEFAULT NULL, `Tjurkalv` int(11) DEFAULT NULL, `Kvigkalv` int(11) DEFAULT NULL, PRIMARY KEY (`jaktlagID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ; -- -- Data i tabell `avskjutning_tot` -- INSERT INTO `avskjutning_tot` (`jaktlagID`, `Jaktlag`, `Tjur`, `Ko`, `Tjurkalv`, `Kvigkalv`) VALUES (1, 'Aspnäs', 0, 0, 0, 0), (2, 'Backa-Berg', 0, 0, 0, 0), (3, 'Bjurvalla', 0, 0, 0, 0), (4, 'Ettingbo-Åkerby/Stärte-Ettinga', 0, 0, 0, 0), (5, 'Ginka', 0, 0, 0, 0), (6, 'Gräsbo', 0, 0, 0, 0), (7, 'Hindersbo', 0, 0, 0, 0), (8, 'Horsskog', 0, 1, 0, 0), (18, 'Lindsbro', 0, 0, 0, 0), (19, 'Sjögränden', 0, 0, 0, 0), (20, 'Lindsbro', 0, 0, 0, 0), (21, 'Sjögränden', 0, 0, 0, 0), (22, 'Skogbo', 0, 0, 0, 0), (23, 'Åby-Upplanda', 0, 0, 0, 0), (24, 'Vreta JK/Vreta 1:9', 0, 0, 0, 0), (25, 'Öndbo JK', 0, 0, 0, 0), (26, 'Öndbo JS', 0, 0, 0, 0);

Permalänk
Inaktiv

Du kan byta ut det mot:

<!DOCTYPE html> <html lang="sv"> <head> <meta charset="utf-8">

Felet i din databas är att kolumnen Jaktlag har latin1 som char set. Ändra det till utf8_general_ci. Tror det heter Collation i phpMyAdmin.

Permalänk
Medlem

Tackar för tipsen! Det ser lite snyggare ut längst upp nu plus att jag fattar vad det betyder :P.

Jag ändrade så att 'Jaktlag' har kollationering utf8_general_ci. Tyvärr fungerar det fortfarande inte :(. Har även provat med Chrome och IE men utan resultat. Kan det vara nåt larvigt med att jag har svenskt Windows eller är det för långsökt?

-- phpMyAdmin SQL Dump -- version 3.3.9 -- http://www.phpmyadmin.net -- -- Värd: localhost -- Skapad: 24 juli 2011 kl 20:41 -- Serverversion: 5.1.53 -- PHP-version: 5.3.4 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Databas: `ovvo` -- -- -------------------------------------------------------- -- -- Struktur för tabell `avskjutning_tot` -- CREATE TABLE IF NOT EXISTS `avskjutning_tot` ( `jaktlagID` int(11) NOT NULL AUTO_INCREMENT, `Jaktlag` varchar(100) DEFAULT NULL, `Tjur` int(11) DEFAULT NULL, `Ko` int(11) DEFAULT NULL, `Tjurkalv` int(11) DEFAULT NULL, `Kvigkalv` int(11) DEFAULT NULL, PRIMARY KEY (`jaktlagID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=27 ; -- -- Data i tabell `avskjutning_tot` -- INSERT INTO `avskjutning_tot` (`jaktlagID`, `Jaktlag`, `Tjur`, `Ko`, `Tjurkalv`, `Kvigkalv`) VALUES (1, 'Aspnäs', 0, 0, 0, 0), (2, 'Backa-Berg', 0, 0, 0, 0), (3, 'Bjurvalla', 0, 0, 0, 0), (4, 'Ettingbo-Åkerby/Stärte-Ettinga', 0, 0, 0, 0), (5, 'Ginka', 0, 0, 0, 0), (6, 'Gräsbo', 0, 0, 0, 0), (7, 'Hindersbo', 0, 0, 0, 0), (8, 'Horsskog', 0, 1, 0, 0), (18, 'Lindsbro', 0, 0, 0, 0), (19, 'Sjögränden', 0, 0, 0, 0), (20, 'Lindsbro', 0, 0, 0, 0), (21, 'Sjögränden', 0, 0, 0, 0), (22, 'Skogbo', 0, 0, 0, 0), (23, 'Åby-Upplanda', 0, 0, 0, 0), (24, 'Vreta JK/Vreta 1:9', 0, 0, 0, 0), (25, 'Öndbo JK', 0, 0, 0, 0), (26, 'Öndbo JS', 0, 0, 0, 0);

Permalänk
Inaktiv

Antagligen pga. att det som redan finns i tabellen är kodat i latin1 men kolumnen är i utf8.
Ändra alla rader och ersätt de konstiga tecknen med åäö.

Permalänk
Medlem

Försökte byta ut de befintliga posterna mot nya poster men det gav inget resultat. Provade också att skapa en helt ny tabell och skrev in posterna från början men även detta fungerade inte korrekt :(.

När jag exporterade den nya tabellen såg det ut som följer

-- phpMyAdmin SQL Dump -- version 3.3.9 -- http://www.phpmyadmin.net -- -- Värd: localhost -- Skapad: 25 juli 2011 kl 16:47 -- Serverversion: 5.1.53 -- PHP-version: 5.3.4 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Databas: `ovvo` -- -- -------------------------------------------------------- -- -- Struktur för tabell `avskjutning` -- CREATE TABLE IF NOT EXISTS `avskjutning` ( `JaktlagID` int(11) NOT NULL AUTO_INCREMENT, `Jaktlag` varchar(50) NOT NULL, `Tjur` int(11) NOT NULL DEFAULT '0', `Ko` int(11) NOT NULL DEFAULT '0', `Tjurkalv` int(11) NOT NULL DEFAULT '0', `Kvigkalv` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`JaktlagID`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ; -- -- Data i tabell `avskjutning` -- INSERT INTO `avskjutning` (`JaktlagID`, `Jaktlag`, `Tjur`, `Ko`, `Tjurkalv`, `Kvigkalv`) VALUES (1, 'Aspnäs', 0, 0, 0, 0), (2, 'Backa-Berg', 0, 0, 0, 0), (3, 'Aspnäs', 0, 0, 0, 0), (4, 'Backa-Berg', 0, 0, 0, 0);

Permalänk
Medlem

Hur vet du att det inte fungerar då? Allting i det dokumentet är ju fel encoding, inte bara databasinnehållet. Det kan lika väl vara fel encoding på rapportsidan.

edit: Rapporten är i UTF-8 men presenteras som Latin1, det är därför å, ä och ö tolkas som två tecken.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

prova att köra följande query direkt efter databasuppkopplingen:

SET names utf8

om du kör mysqli så kan du använda denna funktion.

Permalänk
Medlem

Kör följande SQL och kolla hur det verkligen är sparat i databasen:

SELECT jaktlag, HEX(jaktlag) FROM avskjutning LIMIT 10;

Är det UTF-8 så borde du hitta c3 xx på positionenerna för åäö.

Fixa trasig svenska.
Visa signatur

WS: Fractal Design Pop Silent | Seasonic Prime G12 GC 550W | Gigabyte B650 Eagle AX | Ryzen 7 7700 | Corsair 64GB DDR5 | Intel Arc B580 Limited Edition | Arch Linux (x86_64) | Eizo EV2795
HTPC: Philips 50PUS8804, Kodi samt extern usb-disk
Server: Raspberry Pi 4 | 8GB RAM | HDD 750GB | Arch Linux (armv7h)

Permalänk
Avstängd

Det har inget med doc type alls att göra! Alla html ska dock sparas i utf8 och utan bom.

Har du satt db till UTF8? Sätt det och även tabellerna till UTF8_Swedish

Skicka sedan på mysqli_set_charset() funktionen så ska det absolut funka.

Permalänk
Inaktiv
Skrivet av lolight:

Det har inget med doc type alls att göra! Alla html ska dock sparas i utf8 och utan bom.

Har du satt db till UTF8? Sätt det och även tabellerna till UTF8_Swedish

Skicka sedan på mysqli_set_charset() funktionen så ska det absolut funka.

Jag föreslog bara HTML5 doctypen, inget som hade nått att göra med teckenuppstädningen.

Om du läser tråden kan du se i både inläggen och hans SQL dump att databasen är satt till utf-8.

set_charset kan fungera, notera att det är två olika funktioner för mysql och mysqli.

Permalänk
Inaktiv

$con = mysql_connect("blabla","blabla","blabla") or die(mysql_error());  mysql_select_db("blabla", $con);  mysql_set_charset('utf8',$con);  

Testa att ansluta till databasen så där, tror det kommer fungera!

Permalänk
Medlem

Hej igen!

Provade nu med mysql_set_charset('utf8',$con) och det fungerade! Tack så mycket allihop för den hjälp jag fått. Man är körd utan Sweclockers när man är nybörjare :P.

Permalänk
Medlem

Någon som vet hur man använder å,ä och ö i python

Till exempel:

i = "hejsan åke"

Ger mig felmeddelandet: SyntaxError: Non-ASCII character '\xe5'

EDIT: Löste det med:

# -*- coding: utf-8 -*- i = "hejsan åke"

http://akeiexil.wordpress.com/2009/02/08/a-a-o-i-python/

Permalänk
Medlem

Å tack "mysql_set_charset('utf8',$con); " räddade min natt.

Visa signatur
Permalänk
Medlem
Skrivet av anon133239:

$con = mysql_connect("blabla","blabla","blabla") or die(mysql_error());  mysql_select_db("blabla", $con);  mysql_set_charset('utf8',$con);  

Testa att ansluta till databasen så där, tror det kommer fungera!

Fel.
det ska vara:
mysqli_set_charset($conn,'utf8');
då $conn innehåller inloggnings uppgifterna.

kanske beror på versionen av wamp eller nått, vet inte. fungerar iaf bara om jag kör koden åvan.
mvh benne

Permalänk
Medlem
Skrivet av bennes:

Fel.
det ska vara:
mysqli_set_charset($conn,'utf8');
då $conn innehåller inloggnings uppgifterna.

kanske beror på versionen av wamp eller nått, vet inte. fungerar iaf bara om jag kör koden åvan.
mvh benne

Spännande att se om problemet kvarstår åtta år senare

Permalänk
Medlem
Skrivet av ligmoid:

Spännande att se om problemet kvarstår åtta år senare

Hahah, oh boy! Cant wait

Skickades från m.sweclockers.com