Avatar billede 1409 Praktikant
26. maj 2010 - 16:40 Der er 10 kommentarer og
1 løsning

Overførelse af æøå

Jeg har et lille script, der tilføjer noget tekst til mySQL-db. Dette er i en seperat fil:

IF($_POST['add']){
    $kunstner = $_POST["kunstner"];
    $titel = $_POST["titel"];
   
    mysql_connect("127.0.0.1","root");
    mysql_select_db("musik");
    $query = mysql_query("insert into samling (kunstner, titel)"."values('$kunstner','$titel')");
   
    $besked="Musik tilføjet";
    header("location: addmusic.php?besked=$besked");
}

På siden addmusic.php, med nogle indtastningsfelter osv., skal beskeden vises, men den vil ikke vise æøå?
Har også prøvet med ø, og så vises der intet efter "tilf"

ECHO $_GET['besked'];

Tak på forhånd!
Avatar billede majbom Novice
26. maj 2010 - 16:48 #1
du er langt fra den første med det problem, hverken her eller på google...

du har problemer med dine tegnsæt, det skal være ens på alle dine filer, database og headers.

dvs at du skal have en header i dine filer der angiver tegnsættet for filen, filen skal være gemt i det tegnsæt og din databaseforbindelse skal bruge det tegnsæt.

f.eks. utf8 eller iso-8859-1
Avatar billede 1409 Praktikant
26. maj 2010 - 16:49 #2
By the way:

addmusic.php har i head:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Avatar billede public2 Nybegynder
26. maj 2010 - 17:24 #3
Jeg ved godt at det ikke er den kønneste eller bedste løsning, men havde selv samme problem for noget tid siden og før jeg fik rettet det hele til og havde tid til at finde alle de små fejl der gjorde, så lavede jeg denne metode:

function convertChar($stringToEdit) {
   
$search = array("æ","ø","Ã¥","Æ", "Ø", "Ã…","Ja","æ","ø","å","Æ", "Ø", "Å");
$replace = array("&aelig;","&oslash;","&aring;","&AElig;","&Oslash;", "&Aring;","&aelig;","&oslash;","&aring;","&AElig;","&Oslash;", "&Aring;");$text = str_replace($search, $replace, $stringToEdit);
return $text;

Men jeg ville forsøge at gøre som splazz siger og rette fejlen i dine charset, men ellers er du velkommen til at bruge koden overstående indtil da
Avatar billede aners Nybegynder
26. maj 2010 - 17:40 #4
phpMyAdmin > Collation
Avatar billede 1409 Praktikant
27. maj 2010 - 08:48 #5
Det at db'en skal bruge det rigtige charset vha. kollation er jeg med på...

Men hvis vi glemmer det, så kan jeg ikke forstå, at min besked, der sender med header'en, ikke vises korrekt.

Her er hele koden:
addmusic.php:
<!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>
<link rel="stylesheet" type="text/css" href="music.css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Tilføj musik</title>
</head>

<body>
<form action="action.php" method="post">
Kunstner: <input type="text" name="kunstner" id="kunstner" /><br />
Titel: <input type="text" name="titel" id="titel" /><br />
Klik på knappen: <input type="submit" name="add" id="add" value="- Tilføj -" />

</form>
<?php
ECHO $_GET['besked'];
?>

<br />
</body>
</html>


action.php:
IF($_POST['add']){
    $kunstner = $_POST["kunstner"];
    $titel = $_POST["titel"];
   
    mysql_connect("127.0.0.1","root");
    mysql_select_db("musik");
    $query = mysql_query("insert into samling (kunstner, titel)"."values('$kunstner','$titel')");
   
    $besked="Musik tilføjet";
    header("location: addmusic.php?besked=$besked");
}
Avatar billede olebole Juniormester
27. maj 2010 - 13:48 #6
<ole>

1) Hvilket tegnsæt gemmer du dine filer med?
2) Hvilket tegnsæt sender din server dokumenterne med?

/mvh
</bole>
Avatar billede 1409 Praktikant
27. maj 2010 - 14:31 #7
Der ser ud til at det umiddelbare problem er løst, nemlig ved at sørge for, at filerne er gemt med utf-8. Og nu vises det korrekt.

Med phpinfo finder jeg: HTTP_ACCEPT_CHARSET     ISO-8859-1,utf-8;q=0.7,*;q=0.7

Jeg ved ikke om det er det rigtige...

Men mht. db'en får jeg faktisk underlige tegn i selve db'en, som jeg ser den vha. phpMyAdmin - selvom den er oprettet med CHARSET=utf8 COLLATE=utf8_unicode_ci og den enkelte table med COLLATE utf8_unicode_ci.
Avatar billede majbom Novice
27. maj 2010 - 17:21 #8
så kan det være at din databaseforbindelse ikke er utf8, prøv at sætte den til det med

mysql_set_charset('utf8');
Avatar billede 1409 Praktikant
28. maj 2010 - 14:03 #9
Tak til olebole og splazz!

IF($_POST['add']){
    $kunstner = $_POST["kunstner"];
    $titel = $_POST["titel"];
   
    mysql_connect("127.0.0.1","root");
    mysql_select_db("musik");
   
    mysql_set_charset("utf8");
    $query = mysql_query("insert into samling (kunstner, titel)"."values('$kunstner','$titel')");
   
    $besked="Musik tilføjet";
    header("location:addmusic.php?besked=$besked");
}

Det medførte, at også når jeg henter data fra db'en, skal mysql_set_charset("utf8") bruges.

Jeg fandt i øvrigt også ud af, at mySQL kan konfigureres til utf8 som standard inde i my.ini.

Smid svar...
Avatar billede majbom Novice
28. maj 2010 - 20:43 #10
velbekomme :)
Avatar billede majbom Novice
30. maj 2010 - 20:02 #11
tfp :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester