Just nu i M3-nätverket
Gå till innehåll

Problem med å,ä,ö från databas


Jonas Versén

Rekommendera Poster

Jonas Versén

Har ett litet mystiskt problem med att visa de skandinaviska tecknena.

 

Plockar ut ett namn från en MySQL-databas och på wbebsidan blir alla å,ä och ö utbytta mot skräp tecken, exempel:

 

B„ckens G†rd

 

Källkoden för den genererade sidan innehåller också dessa skräptecken. När jag tittar i databasen är alla skandinaviska tecken intakta, när jag kör php.exe från kommandoprompten så blir alla skandinaviska tecken också korrekta men sett genom en webbläsare (testat både IE 6 och NS 6.2) kommer tecknena ut fel alltså.

 

Någon som har tips?

 

/Jonas

Länk till kommentar
Dela på andra webbplatser

Pontus östlund

 

Du har inte någon mysko teckenuppsättningsdeklarering (oj vilket långt ord ;) på själva HTML-sidan? Alltså en meta-charset-tagg som inte har värdet iso-8859-1.

 

Kanske kan vara något sånt!

 

# ==============================extra===

# Nordens största F l a s h community

# www.communen.com | poppa@communen.com

 

Länk till kommentar
Dela på andra webbplatser

Annars kanske du kan köra:

echo htmlentities($rad["fält"]);

Som konverterar alla ö till ö osv...

 

Testa, och om det fortfarande inte fungerar, skriv ett inlägg till så ska vi se till att lösa det.

 

 

 

 

 

Länk till kommentar
Dela på andra webbplatser

Jonas Versén

Nej, jag har inte satt någon META-tag alls :( Jag har sökt runt på webben och hittat ett par andra med samma fel, dock har jag aldrig sett en lösning så det verkar vara ett ovanligt fel :(

 

Länk till kommentar
Dela på andra webbplatser

Du kan också testa att lägga in följande mellan <head></head>:

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

 

Länk till kommentar
Dela på andra webbplatser

Jonas Versén

Har testat både htmlentities() och htmlspecialchars(), tyvärr så fungerar det inte då å,ä,ö redan är utbytta mot skräptecken, alltså finns inget ö att byta ut till &ouml; En nödlösning vore kanske att lagra alla å,ä,ö som HTML-specialtecknena i databasen direkt... men det vore an absolut nödlösning!

 

 

Länk till kommentar
Dela på andra webbplatser

Jonas Versén

Testade, hjälpte tyvärr inte :(

 

Mitt testskript finns på

http://keeper-jonte.cjb.net/php/projektdatabas/index2.php

 

och källkoden ser ut såhär:

 

<?php

require("connectToDB.php");

?>

 

<html>

 

<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

</head>

 

<body>

<?

$sql="SELECT * from work";

$results = mysql_query( $sql ) or die(mysql_error());

$obj=mysql_fetch_array($results);

echo $obj[1]."<br>";

echo "htmlentities: ".htmlentities($obj[1])."<br>";

echo "htmlspecialchars: ".htmlspecialchars($obj[1])."<br>";

?>

 

</body>

</html>

 

 

Länk till kommentar
Dela på andra webbplatser

Ok... Hur har du gjort insällningarna i databasen? Testa att göra dem från ett HTML-skript också, inte via kommandoprompten.

 

Du kanske kan lägga upp en sida som heter info.php och innehåller:

<?php

phpinfo();

?>

 

Så kanske vi kan hitta nåt fel där...

 

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

> <meta http-equiv="Content-Type"

> content="text/html;

> charset=iso-8859-1">

 

Men du använder ju inte iso-8859! Du använder ju pc8-437. Antingen får du konvertera till iso-8859 (vilket är bäst) eller så får du ange rätt teckentabell istället (vet dock inte pc8 har för namn, om den finns).

 

Konvertera gör du enklast med str_replace. Det är väl ändå inte så många fler specialtecken än å, ä och ö du använder?

 

 

Länk till kommentar
Dela på andra webbplatser

Jonas Versén

På beställning :)

http://keeper-jonte.cjb.net/php/projektdatabas/info.php

 

Är inte säker på vad du menar med "Hur har du gjort inställningarna i databasen? Testa att göra dem från ett HTML-skript också, inte via kommandoprompten."

 

Du menar hur jag har lagt in datan i databasen? Har gjort både manuellt och genom ett skript, och det ger samma resultat. Det skumma är ju att även php ger korrekta å,ä,ö när jag kör php.exe från kommandoprompten... himla mysko :(

 

Länk till kommentar
Dela på andra webbplatser

Jonas Versén

Hur såg du att jag använde pc8-437 då? Jag noterade just att charset stod på default, så jag gick just in och ändrade default charset till iso-8859 i php.ini, men det gjorde ingen skillnad :(

 

och str_replace är ju en nödutväg, men skall väl inte behövas? Jag avskyr olösta mysterier :)

 

Länk till kommentar
Dela på andra webbplatser

Ja, jag skrev fel, med inställningarna menade jag insättningarna.

 

Jag tror felet helt enkelt är att Windows kör en teckenuppsättning, och PHP (alt. MySQL) en annan.

 

Testa följande (taget från manualen):

$charset = mysql_character_set_name($link);

printf ("current character set is %s\n", $charset);

 

Länk till kommentar
Dela på andra webbplatser

Du startade väl om Webbservern och PHP när du gjort inställningarna?

 

Det borde annars lösa problemet tror jag.

 

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

> Hur såg du att jag använde pc8-437 då?

 

För att å och ä i pc8-437 har just de platserna i iso-8859-1.

 

Med andra ord, skriver du ett ä i pc8-437 och tittar på det med iso-8859-1 så står det „

 

 

> Jag noterade just att charset stod på

> default, så jag gick just in och

> ändrade default charset till iso-8859

> i php.ini, men det gjorde ingen

> skillnad :(

 

Helt riktigt, det gör ingen skillnad i Php eftersom iso-8859-1 är default.

 

Vad du har gjort är att du har lagt in texten i databasen med pc8-437.

 

 

> och str_replace är ju en nödutväg,

 

Ja, i och för sig, det är ju smidigare att skriva en egen funktion som parsar texten och sköter konverteringen direkt istället för att köra ett antal str_replace, men det känns som att str_replace passar bättre för dig.

 

 

> men skall väl inte behövas?

 

Jo, någonstans måste ju konverteringen ske, och det är ju enklast att göra den där man har bäst kontroll.

 

 

> Jag avskyr olösta mysterier :)

 

Det är inget mysterium. Du använde en annan teckentabell när du sparade texterna än när du hämtar dem. Klart du inte får samma resultat då.

 

 

Länk till kommentar
Dela på andra webbplatser

Jonas Versén

Fungerade tyvärr inte, i manualen står det "(PHP 4 CVS only)" om den funktionen. Men det SKALL ju vara iso-8859.

 

Men jag tror du har rätt i att antingen php eller MySQL har en felaktig teckenuppsättning, kanske dags att börja undersöka MySQL.

 

Länk till kommentar
Dela på andra webbplatser

Jonas Versén

Ett mysterium är ju ett mysterium tills man vet svaret, vilket jag inte visste fram tills nu :) Då förstår jag vad som är felet och har bara en fråga kvar: Hur ändrar jag teckenuppsättningen vid insättningen i databasen?

 

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

Nej, det är inte fel teckenuppsättning varken i programmet php eller Mysql. Det är bara du som har matat in datat i fel teckenuppsättning. Det är allt.

 

 

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

Det beror på varifrån du sätter in den. Skriver du in den själv? I så fall bör du skriva den i ett program som använder iso-8859-1 (typ Windowsprogram) istället för pc8.

 

Om du däremot redan har den i en textfil så får du konvertera den.

 

Men det kanske enklaste just nu är nog om du använder str_replace i php.

 

 

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

Ursäkta om jag låter lite kort, men jag är lite stressad, för jag ska med ett tåg om en liten stund.

 

 

Länk till kommentar
Dela på andra webbplatser

Jonas Versén

Stort tack till både Cariad och Thomas Tydal. Felet var att jag matat in all data direkt i kommandoprompten och ingen via skript (som jag faktiskt trodde, du var ju på rätt väg där Cariad :)

 

När jag gör ett inlägg i Databasen via skript innehållandes å,ä,ö så blir dom skumma i databasen istället, men det gör ju inget :) Som tur var är databasen liten och kan lätt göras om!

 

Stort tack!

 

 

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

> När jag gör ett inlägg i Databasen

> via skript innehållandes å,ä,ö så

> blir dom skumma i databasen istället,

> men det gör ju inget :)

 

Det beror på att du tittar i databasen med pc8. Om du gör det med ett Windowsprogram (och därmed iso-8859-1), exempelvis http://www.anse.de/mysqlfront/ istället, så ser det rätt ut även där.

 

 

Länk till kommentar
Dela på andra webbplatser

Bra att det löste sig...

Så har man lärt sig lite på en gång också :)

 

Efter vad jag kommer ihåg från gamla windowsversioner, så körde kommandoprompten med en annan teckenuppsättning, och det var ju precis det som var fallet här.

 

Du kör ju med WinXP, men vilken kommandoprompt körde du? "command" eller "cmd"?

 

 

Länk till kommentar
Dela på andra webbplatser

Hmm... cmd kör nämligen i 32-bitar, och borde därför använda Windows teckenuppsättning.

command däremot kör endast i 8 och använder sig av DOS-teckenuppsättning (tror jag).

 

Länk till kommentar
Dela på andra webbplatser

Är inte frågan här varför MySQL lagrar med specifika teckenuppsättningar istället för att konvertera till Unicode som de flesta andra databaser tycks göra ?

 

Alla databaser torde lagra som Unicode och sedan är det upp till de drivrutiner som ligger emellan att konvertera till och från specifika teckenuppsättningar.

 

Bara en fundering, verkar konstigt att den lagrar rakt av i samma tecken uppsättning man skriver i.

 

[inlägget ändrat 2002-08-03 13:46:22 av Xyzz]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...