Oprettet ons. d. 18. juli 2012 kl. 12:36:07

downloading
downloading (10.535 point. Point ude: 595)

Send data i url med 'æøå' i UTF8 mellem to siden og gem i MySQL

Hej alle sammen.

Jeg har igennem noget tid nu haft nogle problemer med encoding, databaser og at sende information i mellem disse. Mit problem er:

Jeg har en side i UTF8 der laver et link: "test.dk/test.php?variabel=Alan Sørensen"

test.php er ligeledes UTF8 og skal gemme variablen i en MySQL database der ligeledes er UTF8.

Hvordan skal man gøre det? Hvis jeg blot bruger echo uden vidre virker det i firefox og crome, men ikke i IE. Er den rigtige måde at gøre det på at bruge: urlencode($variabel) på siden med linket og urldecode($_GET['varaibel']) på test.php eller er der en anden korrekt metode?

På forhånd mange tak.

Skrevet ons. d. 18. juli 2012 kl. 16:59:00| #1

olebole
olebole (216.733 point)
<ole>

Hvad betyder det, at dine filer "er i UTF-8"? Hvad har du gjort for at sørge for det?

Hvad betyder det, at din database "er UTF-8"? Hvad har du gjort for at sørge for det?

/mvh
</bole>

Skrevet ons. d. 18. juli 2012 kl. 19:25:33| #2

downloading
downloading (10.535 point)
Hvad betyder det, at dine filer "er i UTF-8"? Hvad har du gjort for at sørge for det?
Min editor står til at encode filerne i UTF-8

Hvad betyder det, at din database "er UTF-8"? Hvad har du gjort for at sørge for det?
Min MySQL tabeller er lavet med tegnsætningen "utf8_general_ci"

Giver det mening?

Skrevet ons. d. 18. juli 2012 kl. 19:29:41| #3

downloading
downloading (10.535 point)
Nej vent, min editor står til ANSI, måske det er et problem?

Skrevet ons. d. 18. juli 2012 kl. 19:43:07| #4

olebole
olebole (216.733 point)
Ja, det er helt afgørende!  =)

Desuden skal du bruge utf8_danish_ci

Skrevet ons. d. 18. juli 2012 kl. 19:44:50| #5

olebole
olebole (216.733 point)
Vær opmærksom på, at allerede bestående indholds encoding ikke automatisk ændres, når du skifter tegnsæt/kollation på din database eller tabel

Skrevet ons. d. 18. juli 2012 kl. 19:52:42| #6

downloading
downloading (10.535 point)
okay.. Så mine filer skal IKKE være ANSI, men UTF-8... Jeg har lidt problemer med at forstå om det skal være med eller uden bum?

Grunden til at min database er utf8_general_ci er at dataen i  der indsættet som link i "test.dk/test.php?variabel=Alan Sørensen" er taget fra en database der er utf8_general_ci, mener du stadig jeg bør bruge utf8_danish_ci? Som det er nu får jeg ting i databasen som TÃ¥ke Sær Tæøåke i stedet for Tåke Sær Tæøåke...

Skrevet ons. d. 18. juli 2012 kl. 20:04:06| #7

olebole
olebole (216.733 point)
Så er den anden database også sat forkert op. Du kan ikke blande tegnsæt sammen.

Du skal gemme uden BOM. Det er tre 'usynlige' tegn i begyndelsen af filen, og de kan give problemer ved includes i kombination med brug af headers (også sessions og cookies).

Hvis du bruger phpMyAdmin til at administrere dine databaser med, skal du være sikker på, den er sat rigtigt op. Tjek evt. i browserens kildekode og se, hvad Content-Type meta'en siger.

Ofte er den sat op til iso-8859-1, og så er der sat vand over til ballade  :o|

Skrevet ons. d. 18. juli 2012 kl. 20:13:06| #8

downloading
downloading (10.535 point)
Den anden database er en joomla database og de står også fint hvis jeg går ind i den database i min phpMyAdmin.

phpMyAdmin er vidst også sat rigtigt op
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Min erfaring sagde mig også at der skulle bruges uden bum da jeg netop havde problemer med header på et tidspunkt. Jeg forstår dog ikke det med databasen. Hvis nu jeg fx gerne vil gemme både svenske, tyske og danske navne (som fx ö, æ, ø, å, é osv) hvorfor kan jeg så ikke gøre det uden problemer i en utf8_general_ci?

På forhånd tak.

Skrevet ons. d. 18. juli 2012 kl. 21:58:12| #9

olebole
olebole (216.733 point)
Fordi, utf8_general_ci ikke sorterer æ, ø og å korrekt

Skrevet ons. d. 18. juli 2012 kl. 22:13:22| #10

downloading
downloading (10.535 point)
Når alle mine filer er ANSI as UTF-8 (uden bum), det er valget i Notepad++, da opstår samme fejl og det fremkommer stadig i phpMyAdmin som TÃ¥ke Sær Tæøåke i stedet for Tåke Sær Tæøåke...

Skrevet ons. d. 18. juli 2012 kl. 22:35:43| #11

olebole
olebole (216.733 point)
Er det data, du lige har sat ind, du taler om?

Skrevet ons. d. 18. juli 2012 kl. 22:51:59| #12


Skrevet tor. d. 19. juli 2012 kl. 00:16:26| #13

olebole
olebole (216.733 point)
Måske, din opsætning bruger en ANSI-forbindelse. Du kan prøve at skifte til utf-8:

$mysqli->set_charset('utf8');

Skrevet tor. d. 19. juli 2012 kl. 00:39:43| #14

downloading
downloading (10.535 point)
Hvis jeg udkommenterer linjen med utf8 er der ingen warnings, men den skriver som sagt mærkeligt i databasen. Skriver jeg linjen i min mysql connect som er angivet nedenfår får jeg fejlene også angivet nedenfor.

mysql_set_charset('utf-8');
// Make a MySQL Connection
mysql_connect('server', 'user', 'pass');
mysql_select_db("db") or die(mysql_error());



Warning: mysql_set_charset() [function.mysql-set-charset]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/www/mysql_connect.php on line 3

Warning: mysql_set_charset() [function.mysql-set-charset]: A link to the server could not be established in /home/www/mysql_connect.php on line 3

Warning: mysql_set_charset() [function.mysql-set-charset]: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) in /home/www/mysql_connect.php on line 3

Warning: mysql_set_charset() [function.mysql-set-charset]: A link to the server could not be established in /home/www/mysql_connect.php on line 3

Warning: Cannot modify header information - headers already sent by (output started at /home/www/mysql_connect.php:3) in /home/www/postxml.php on line 16


Bruger jeg følgende

får jeg
object(stdClass)#2 (8) { ["charset"]=> string(6) "latin1" ["collation"]=> string(17) "latin1_swedish_ci" ["comment"]=> string(0) "" ["dir"]=> string(0) "" ["min_length"]=> int(1) ["max_length"]=> int(1) ["number"]=> int(8) ["state"]=> int(801) }
hvilket jo kunne tyde på at det er sat til latin1. Men hvordan ændre jeg det med den kode du har, jeg bruger normalt MySQL og php med den connect jeg har vist og koder som:
$query = "SELECT * FROM tabel WHERE felt = '".$value."' ORDER BY id DESC";
$result = mysql_query($query)
or die(mysql_error('Error when selecting data'));
while($row = mysql_fetch_assoc($result)) {                    echo "'".$row["felt1"]."' at ".date('Y-m-d H:i', $row["felt2"])."<br>";
}


Mange tak for hjælpen..

Skrevet tor. d. 19. juli 2012 kl. 00:42:01| #15

downloading
downloading (10.535 point)
ups.. Bruger jeg følgende
  $db = mysqli_init();
  $db->real_connect('server', 'user', 'pass');
  var_dump($db->get_charset());

Skrevet tor. d. 19. juli 2012 kl. 03:44:19| #16

olebole
olebole (216.733 point)
MySQL-API'et kan absolut ikke anbefales. Det er gammelt, fejlkonstrueret og usikkert. Brug MySQLI med prepared statements i stedet. Du åbner en MySQLI forbindelse med:

$mysqli = new mysqli('server', 'user', 'pass', 'database');
if (mysqli_connect_errno()) die (mysqli_connect_error());

// Først nu kan du sætte dit charset
$mysqli->set_charset('utf8');

Skrevet tor. d. 19. juli 2012 kl. 13:06:49| #17

downloading
downloading (10.535 point)
DET VIRKER! :)

Har lavet det hele om til MySQLI og brugt din
$mysqli->set_charset('utf8');

og nu står alt som det skal i databasen.. Du skal have rigtig mange tak for hjælpen! :) Vil du ikke skrive et svar?

Skrevet tor. d. 19. juli 2012 kl. 16:11:21| #18

olebole
olebole (216.733 point)
Kanon! Ellers tak, jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)

Skrevet tor. d. 19. juli 2012 kl. 16:17:55| #19

downloading
downloading (10.535 point)
okay. Men ikke desto mindre mange tak for hjælpen..! Jeg tænker at det også må have kunnet virke med MySQL men at fejlen muligvis ligger i mysql_set_charset('utf-8'); men det er blot et gæt.. Alt i alt, der virker som det skal med MySQLI :) Tak for hjælpen..

Skrevet tor. d. 19. juli 2012 kl. 16:32:13| #20

olebole
olebole (216.733 point)
Selvtak. Jo, det ville det sikkert, men hele den extension (MySQL) er officielt deprecated. Den falder formodentlig helt væk indenfor overskuelig fremtid, så du kan ligeså godt lære og vænne dig til at bruge MySQLI eller PDO (Portable Data Objects)  *o)

Skrevet tor. d. 19. juli 2012 kl. 16:33:30| #21

olebole
olebole (216.733 point)
Har du ikke rodet med det før, er der her en lille begynder guide om emnet  =)

Skrevet fre. d. 20. juli 2012 kl. 03:42:05| #22

tobrukDk
tobrukDk (2.140 point)
#downloading

mysqli er vejen frem!. jeg har læse på flere side at det er bedre og mere sikkert og du bliver rigtigt god til php og mysqli hvis du kigge efter olebole lille guide som har lavet til os!! ;) jeg mener klart det er noget som du kan bruge frem over!

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   


Seneste spørgsmål

Hjælp til database kolonne

Oprettet den 22. maj 2013 kl. 17.44
StotheT giver 30 point for svar | Giv et svar »

opret tabel og insert

Oprettet den 22. maj 2013 kl. 14.10
agent_qa giver 60 point for svar | Giv et svar »

WordPress husker stadig gamle stier, efter skift af URL

Oprettet den 22. maj 2013 kl. 14.08
w13 giver 70 point for svar | Giv et svar »

Seneste guides

Slettet
Håndtering af tekstoversættelse i...
Parameteriseret tekstformatering i C#
C++ Historie og Programmering - Del 1







Tips & Tricks fra PC World

Teaser billede

Her er seks Google Labs-funktioner, som du skal slå til med det samme

Gmail Labs giver dig adgang til en masse smarte funktioner, som Googles ingeniører leger med i øjeblikket.


Anmeldelser fra PC World

Teaser billede

Test: Samsung Galaxy S4 er et hit - trods gøglertricks

Kan Samsung beholde førertrøjen i det store Android-race? Galaxy S4 er smækfyldt med innovative funktioner, men også med en del gøgl. Er det for meget? Få vores dom over Samsungs nye topmodel.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Nu kan du få 1 terabyte gratis plads hos Flickr

Yahoo har relanceret sin fototjeneste Flickr med 1 terabyte gratis plads til brugernes billeder og videoer.


Nyheder fra Computerworld

Teaser billede

Galleri: Her er de vigtigste programmører

Computerhistorien har fra hulkort til JavaScript været drevet frem af mange forskellige typer programmører. Se de vigtigste typer her. Er du en af dem?


IT Kurser
Samarbejdspartnere

Udgiver · © 2013 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger