Vinnaren i pepparkakshustävlingen!
2021-08-01, 13:24
  #1
Medlem
Hej igen.

Jag får inte ut ÅÄÖ med min PDO-uppkoppling. Har suttit och läst här och var och testat det mesta tror jag, nu behöver jag hjälp att felsöka det här. En rad som innehåller "övrigt" kommer alltså ut som "\u00f6vrigt".

Saker jag använder/har testat:

Databasen:
charset: utf8_general_ci

PDO:
$con->exec('SET NAMES UTF8');
$con->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
$con = new PDO('mysql:host=XXXX.XX.mysql;dbname=XXXX_XXXXXXX; charset=utf8', USER, DBPASS);

PHP:
header("Content-type: text/html; charset=utf-8");
header("Accept-Language: sv");
mb_internal_encoding("utf-8");
utf8_encode($results);
utf8_decode($results);

HTML
<html lang="sv">
<meta charset="UTF-8">

Jag är förmodligen helt ute och cyklar och när man sitter uppe sent blir det rörigt ibland, men jag hoppas någon vänlig själ vill flika in här.
Citera
2021-08-01, 13:31
  #2
Medlem
a-mortals avatar
Citat:
Ursprungligen postat av do-ob
Hej igen.

Jag får inte ut ÅÄÖ med min PDO-uppkoppling. Har suttit och läst här och var och testat det mesta tror jag, nu behöver jag hjälp att felsöka det här. En rad som innehåller "övrigt" kommer alltså ut som "\u00f6vrigt".

Saker jag använder/har testat:

Databasen:
charset: utf8_general_ci

PDO:
$con->exec('SET NAMES UTF8');
$con->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
$con = new PDO('mysql:host=XXXX.XX.mysql;dbname=XXXX_XXXXXXX; charset=utf8', USER, DBPASS);

PHP:
header("Content-type: text/html; charset=utf-8");
header("Accept-Language: sv");
mb_internal_encoding("utf-8");
utf8_encode($results);
utf8_decode($results);

HTML
<html lang="sv">
<meta charset="UTF-8">

Jag är förmodligen helt ute och cyklar och när man sitter uppe sent blir det rörigt ibland, men jag hoppas någon vänlig själ vill flika in här.

Citat:
PDO::MYSQL_ATTR_INIT_COMMAND can not be set with PDO::setAttribute() after you've established your database connection (the constant name says it all), you've to specify it in the constructor using the $driver_options argument, like this:

$this->db = new PDO($this->dsn, $this->username, $this->password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

An alternative to this is to just execute that very same query immediately after connecting:

$this->db = new PDO($this->dsn, $this->username, $this->password);
$this->db->exec("SET NAMES 'utf8';");
https://stackoverflow.com/questions/...s-in-php-mysql
Citera
2021-08-01, 13:42
  #3
Medlem
Nu har jag tagit bort alla mina andra knep och har min anslutningssträng så här med samma resultat:

$con = new PDO('mysql:host=XXXX.XX.mysql;dbname=XXXX_XXXXXXX' , USER, DBPASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"));

Testar även enskilt $con->exec("SET NAMES 'utf8';"), samma där.
__________________
Senast redigerad av do-ob 2021-08-01 kl. 13:45.
Citera
2021-08-01, 19:15
  #4
Moderator
Protons avatar
Citat:
Ursprungligen postat av do-ob
Hej igen.

Jag får inte ut ÅÄÖ med min PDO-uppkoppling. Har suttit och läst här och var och testat det mesta tror jag, nu behöver jag hjälp att felsöka det här. En rad som innehåller "övrigt" kommer alltså ut som "\u00f6vrigt".

Saker jag använder/har testat:

Databasen:
charset: utf8_general_ci

PDO:
$con->exec('SET NAMES UTF8');
$con->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
$con = new PDO('mysql:host=XXXX.XX.mysql;dbname=XXXX_XXXXXXX; charset=utf8', USER, DBPASS);

PHP:
header("Content-type: text/html; charset=utf-8");
header("Accept-Language: sv");
mb_internal_encoding("utf-8");
utf8_encode($results);
utf8_decode($results);

HTML
<html lang="sv">
<meta charset="UTF-8">

Jag är förmodligen helt ute och cyklar och när man sitter uppe sent blir det rörigt ibland, men jag hoppas någon vänlig själ vill flika in här.
Felaktig databasskollation när du skapade din databas? Det ser ju ut som om ö kommer ut som nåt unicodetecken?

Här står det lite nyttigt om kollationer, hjälper det?

https://www.mysqltutorial.org/mysql-collation/

Här var nåt som är betydligt jobbigare men som innebär en del ingrepp i ini-filer etc som kanske kan fixa problemet med?

https://www.toptal.com/php/a-utf-8-p...-php-and-mysql
__________________
Senast redigerad av Proton 2021-08-01 kl. 19:23.
Citera
2021-08-02, 20:31
  #5
Medlem
Okej, efter att ha testat allt visade det sig att mitt problem var att jag visade utskriften genom json_encode, eftersom jag ska köra vidare med js. Lösningen var att lägga till ett extra argument:

json_encode( $result, JSON_UNESCAPED_UNICODE );

Citera
2021-08-03, 23:54
  #6
Medlem
SKetchers avatar
Citat:
Ursprungligen postat av do-ob
Okej, efter att ha testat allt visade det sig att mitt problem var att jag visade utskriften genom json_encode, eftersom jag ska köra vidare med js. Lösningen var att lägga till ett extra argument:

json_encode( $result, JSON_UNESCAPED_UNICODE );


Grundproblemet ligger fortfarande i din databas då stringarna verkar satta i unicode. Ändra detta till utf så slipper du behöva göra sådär.
Citera
2021-08-08, 11:29
  #7
Medlem
Citat:
Ursprungligen postat av SKetcher
Grundproblemet ligger fortfarande i din databas då stringarna verkar satta i unicode. Ändra detta till utf så slipper du behöva göra sådär.
Jag använder utf8_general_ci när jag skapar nya tabeller, är det någon bakomliggande inställning du menar?
Citera
2021-08-08, 20:52
  #8
Medlem
Enterprises avatar
Citat:
Ursprungligen postat av do-ob
Jag använder utf8_general_ci när jag skapar nya tabeller, är det någon bakomliggande inställning du menar?
Det är väl bara att gå in i databasen direkt och kolla om bokstäverna är rätt?
Antar att du har tillgång till phpAdmin eller liknande GUI-verktyg för att komma åt databasen direkt?
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback