Hi

Ik probeer unicode karaters op te slaan zoals (als ik hier tekens toon wordt het bericht afgekapt:))

in de header staat <meta charset="utf-8">
Ik gebruik <form accept-charset="utf-8">
Ik heb de tabel en veld aangepast naar utf8mb4
ALTER TABLE trn_gamecomments CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE trn_gamecomments CHANGE `comment` `comment` TEXT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL;

De gegevens komen juist aan. Ik zie ze bij een print_r($_POST)
In de database staan ze juist (phpMyAdmin) maar na opvragen krijg ik ?

Jan
Ook al een UTF-8 header in PHP geplaatst?
wordt automatsch toegevoegd via htaccess: AddDefaultCharset utf-8

[size=xsmall]Toevoeging op 18/10/2021 12:00:35:[/size]

Gewoon voor de zekerheid nog eens in het phpscript geplaatst
header('Content-Type: text/html; charset=utf-8');
Jan R op 18/10/2021 11:57:06

Gewoon voor de zekerheid nog eens in het phpscript geplaatst
header('Content-Type: text/html; charset=utf-8');

Wel handig als je dan ook even aangeeft of er iets is gewijzigd ... we hebben namelijk geen glazen bol ;)
Blijkbaar niet anders had ik wel iets gezegd zoals opgelost. Niet dus.
Jan R op 18/10/2021 14:41:55

... anders had ik wel iets gezegd zoals opgelost ...

Wat jij zou hebben gezegd kunnen we uiteraard niet raden ;-)

Maar goed, nog niet opgelost dus. Dan is dat in ieder geval duidelijk.
Heb je de tut al snel gescand op mogelijke issues? Bijvoorbeeld heb je de mysqli client (in PHP) in UTF8 gezet?
<?php
$db = new mysqli($host, $account, $password, $database);
$db->set_charset('utf8mb4');
?>

Sorry voor deze be'tut'eling ;-)
Ad Fundum op 18/10/2021 20:08:31

Heb je de tut al snel gescand op mogelijke issues? Bijvoorbeeld heb je de mysqli client (in PHP) in UTF8 gezet?
<?php
$db = new mysqli($host, $account, $password, $database);
$db->set_charset('utf8mb4');
?>


Ook niet gelukt. Zelfs de totale db omgezet naar utf8mb4 hielp niet. Toch zou het mogelijk moeten zijn want staat juist in phpMyAdmin

[size=xsmall]Toevoeging op 19/10/2021 06:09:09:[/size]

Bij de export van phpMyAdmin staat alles OK
https://www.janr.be/sql/sql.sql
Na de import nog steeds OK in phpMyAdmin

[size=xsmall]Toevoeging op 19/10/2021 06:23:44:[/size]

Extra info:
Mijn data komt van 4 tabellen waarvan 1 dubbel dus 5.
Als ik enkel de tabel met smileys opvraag dan krijg ik per smiley 3 ruitjes met een vraagteken
Als ik maar 1 voorbeeld noem hoeft je dat natuurlijk niet te weerhouden de rest van de tutorial te lezen.
Want die is sluitend, als je alles volgt heb je geen problemen met die vraagtekens.
Dus dan nog een andere 'educated guess': snapt je browser dat-ie UTF-8 ontvangt? Die meta tag is alleen handig voor HTML-bestanden die op zichzelf staan. Als je ze via een webserver aanbiedt dan kan je beter de goede HTTP header meegeven.
<?php
header('Content-Type: text/html; charset=utf-8'); /** @link http://www.w3.org/International/O-HTTP-charset */
?>

Controleer ook of je webserver niet stiekum een andere encoding meestuurt, bijvoorbeeld via de developertools in de browser (F12).

[size=xsmall]Toevoeging op 19/10/2021 09:25:32:[/size]

- Ariën - op 18/10/2021 20:46:27
[sub]Waar is hij eigenlijk?[/sub]

Hij doet het rustiger aan nadat hij hier onjuiste dingen ging beweringen.
Zo heel af en toe heb ik nog wel een post van Thomas gezien.
Zonder base64 zoals hieronder beschreven, krijg ik ? te zien ipv emojis.

Bewaar je comment voortaan als base64 en decode het weer in PHP
Met gebruik van je demo database, voer deze queries uit

UPDATE trn_gamecomments SET comment = TO_BASE64(comment);
SELECT * FROM trn_gamecomments;
SELECT *, FROM_BASE64(comment) FROM trn_gamecomments;


Database ziet er dan zo uit :

-- Adminer 4.8.1 MySQL 5.5.5-10.3.29-MariaDB dump

SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

SET NAMES utf8mb4;

DROP TABLE IF EXISTS `trn_gamecomments`;
CREATE TABLE `trn_gamecomments` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `gameid` int(11) NOT NULL,
  `w_b` enum('white','black') COLLATE utf8mb4_unicode_ci NOT NULL,
  `comment` text COLLATE utf8mb4_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `gameid` (`gameid`,`w_b`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

INSERT INTO `trn_gamecomments` (`id`, `gameid`, `w_b`, `comment`) VALUES
(1,	4145,	'white',	'V2l0'),
(2,	4145,	'black',	'WndhcnQ='),
(38,	3876,	'black',	'TWlqbiB2ZXJzbGFnIG1ldCBbYl1ib2xkWy9iXSBlbiBbaV1pdGFsaWNbL2ldIGthcmFrdGVycw0K\nOikgOnAgOigNCvCfmJgJ8J+YmQnwn5iaCfCfmJsJ8J+YnAnwn5idCfCfmJ4J8J+Ynw==');

-- 2021-10-19 07:57:27


Dan in HTML/PHP :

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Emojis uit database</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
</head>
<body>
<?php
$db = new mysqli(localhost, 'user', 'password', 'database');
$query = 'SELECT * FROM trn_gamecomments WHERE id = 38;';
$result = $db->query($query);
$row = $result->fetch_object();
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo $row->comment . '<br />';
echo base64_decode($row->comment);
?>
</body>
</html>


Bij een INSERT doe je in PHP base64_encode($comment)

Reageren