PHP/MySQL - Charset problemen

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • flexje
  • Registratie: September 2001
  • Laatst online: 29-09 22:40

flexje

got-father

Topicstarter
Hoi,

Ik kom hier eventjes echt niet uit:
Ik heb een database in mysql en script in PHP. Nu verstuur ik data met een formulier via ajax naar een functie in PHP om een record toe te voegen. Normaliter gaat dit ook prima. Alleen krijg ik ipv een € teken in de record een € (in de output browser wel gewoon een €).

- Kolom type in mysql is longtext, collatie utf8mb4_unicode_ci

Nu snap ik dat dit waarschijnlijk een charset probleem is maar het volgende helpt niet:
code:
1
<meta charset="utf-8">
in de header van de html pagina.

code:
1
accept-charset="utf-8"
in de form

- tabel/database charset veranderd naar: charset & collation to utf8mb4 and utf8mb4_unicode_ci

- de charset meesturen met PDO:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $connection = new PDO("mysql:host=$servername;dbname=$db;charset=utf8mb4", $username, $password, $options);
    $connection->exec("SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'");
    // set the PDO error mode to exception
    $connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //echo "Connected successfully";
} catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}


En met
code:
1
mb_detect_encoding()
krijg ik UTF8 terug....

Wie o wie? :?

[ Voor 4% gewijzigd door flexje op 10-06-2024 18:30 ]

"Try not to become a man of success but rather to become a man of value..."

Beste antwoord (via flexje op 11-06-2024 22:24)


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:53

MueR

Admin Tweakers Discord

is niet lief

(jarig!)
Als je in je $options array nou ook even deze toevoegt:
PHP:
1
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'",
dan ben je gewoon meteen klaar zonder extra query calls. Maar misschien begrijp ik je verkeerd en heb je exact dat gedaan.

Anyone who gets in between me and my morning coffee should be insecure.

Alle reacties


Acties:
  • +1 Henk 'm!

  • flexje
  • Registratie: September 2001
  • Laatst online: 29-09 22:40

flexje

got-father

Topicstarter
Het is opgelost.

Probleem lag toch bij de
code:
1
SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'"


Ik heb deze in de __construct() toegevoegd zodat in elke functie dit wordt toegepast.

Bedankt!

"Try not to become a man of success but rather to become a man of value..."


Acties:
  • +3 Henk 'm!

  • SVMartin
  • Registratie: November 2005
  • Niet online
Rubber duck effect :)

Acties:
  • Beste antwoord
  • +1 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 23:53

MueR

Admin Tweakers Discord

is niet lief

(jarig!)
Als je in je $options array nou ook even deze toevoegt:
PHP:
1
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8mb4' COLLATE 'utf8mb4_unicode_ci'",
dan ben je gewoon meteen klaar zonder extra query calls. Maar misschien begrijp ik je verkeerd en heb je exact dat gedaan.

Anyone who gets in between me and my morning coffee should be insecure.