[PHP] utf-8

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een probleem met een site die ik aan het bouwen ben. Ik wil namelijk de simpele string 'Categorieën' goed renderen naar utf-8.

Wat ik heb gedaan:

In mijn index.php
PHP:
1
header('Content-type: text/html; charset=UTF-8') ;


Daarnaast heb ik de meta tag toegevoegd aan mijn template:
HTML:
1
<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />


In mijn php.ini
PHP:
1
default_charset = UTF-8


Mijn database:
SQL:
1
2
3
CREATE DATABASE development_webshop CHARACTER SET utf8 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT COLLATE utf8_general_ci;

ALTER TABLE translation DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;


Daarnaast heb ik alle verbindingsvariablen met mysql gecheckt en SET NAMES 'utf8' uitgevoerd als eerste query.

Na het opzetten probeerde ik de string categorieën in te voeren in de database(via een test script in php).
PHP:
1
$d->execute("UPDATE translation SET value = 'categorieën' WHERE id = 1");


Wanneer ik dit bekijk in de database lijkt het allemaal goed te staan. Maar wanneer ik het daarna weer ophaal krijg ik het beroemde vraagteken.

Blijkbaar was de input string geen UTF-8. Ik heb daarna geprobeerd een bestand aan te maken met dezelfde string en deze op te slaan als UTF-8.

PHP:
1
$d->execute("UPDATE translation SET value = '" . file_get_contents('test.txt') . "' WHERE id = 1");


Wederom levert mij dit hetzelfde vraagteken op. Terwijl mijn input toch wel als utf-8 opgeslagen is.

Wat werkt wel?
http://php.net/manual/en/function.utf8-encode.php

Het vreemde vind ik dat ik volgens mij een utf-8 string heb en geen latin?

Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 11:55

MueR

Admin Tweakers Discord

is niet lief

Je moet je mysql connection charset even op UTF8 zetten.
PHP:
1
mysql_set_charset('utf8', $dbConnection);

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


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Verwijderd schreef op donderdag 07 februari 2013 @ 17:41:
Daarnaast heb ik alle verbindingsvariablen met mysql gecheckt en SET NAMES 'utf8' uitgevoerd als eerste query.
Dit is evil, onder andere mysql_real_escape_string wordt daardoor niet geupdate, zie http://www.php.net/manual/en/mysqlinfo.concepts.charset.php :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
MueR schreef op donderdag 07 februari 2013 @ 17:50:
Je moet je mysql connection charset even op UTF8 zetten.
PHP:
1
mysql_set_charset('utf8', $dbConnection);
Dit doe ik in principe al door: SET NAMES uit te voeren.
In de docs van mysql_set_charset staat:
This is the preferred way to change the charset. Using mysql_query() to set it (such as SET NAMES utf8) is not recommended. See the MySQL character set concepts section for more information.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
En de encoding van je PHP file is ook UTF8? (Shot in the dark).
offtopic:
déjà vu :P

[ Voor 43% gewijzigd door RobIII op 07-02-2013 18:10 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
pedorus schreef op donderdag 07 februari 2013 @ 17:58:
[...]

Dit is evil, onder andere mysql_real_escape_string wordt daardoor niet geupdate, zie http://www.php.net/manual/en/mysqlinfo.concepts.charset.php :p
Ah, ik zie het. Het werd veel aangedragen op internet. Heb het gewijzigd maar levert helaas niets op.
Wel wat op(cache) 8)7
RobIII schreef op donderdag 07 februari 2013 @ 18:08:
En de encoding van je PHP file is ook UTF8? (Shot in the dark).
Ja, ik gebruik netbeans en heb mijn project encoding op UTF-8 staan(ik neem aan dat mijn files dan ook utf-8 ge-encode zijn.


De volgende functie:
PHP:
1
htmlentities($databaseWaarde, ENT_QUOTES, 'UTF-8')


Geeft een lege string. Dit impliceert dat ik een fout heb in mijn string volgens de docs.

Echter als ik dit doe:
PHP:
1
htmlentities('TestUTF* Categoriëáá&#27721;&#23383;/&#28450;a', ENT_QUOTES, 'UTF-8')


Wordt dit prima weergegeven in utf-8. Het lijkt dus echt te zitten in de opslag van mysql. Echter heb ik mijn database opgezet zoals hier wordt aangegeven: http://blog.loftdigital.com/blog/php-utf-8-cheatsheet

[ Voor 67% gewijzigd door Verwijderd op 07-02-2013 18:30 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Gebruik je nu al mysql_set_charset en retourneert die TRUE?

Bij het bekijken van je database, gebruik je daarbij geen latin1 (oftewel op de connectie, of bijv. verkeerde set ingesteld in iets als putty)?

Is het gebruikte bestand daadwerkelijk in utf8 (en is er geen escaping nodig waardoor de query faalt in je nu bijv. oude data ziet)?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
pedorus schreef op donderdag 07 februari 2013 @ 18:15:
Gebruik je nu al mysql_set_charset en retourneert die TRUE?

Bij het bekijken van je database, gebruik je daarbij geen latin1 (oftewel op de connectie, of bijv. verkeerde set ingesteld in iets als putty)?

Is het gebruikte bestand daadwerkelijk in utf8 (en is er geen escaping nodig waardoor de query faalt in je nu bijv. oude data ziet)?
Muer & pedorus tnx _/-\o_ _/-\o_ _/-\o_

Alleen mysql_set_charset blijkt te werken. Wel vreemd dat veel tutorials toch SET NAMES aandragen als oplossing.

Bedankt voor de hulp iig! Wordt dit topic uiteindelijk ook verwijderd? Als dit niet zo is kan ik dit namelijk als bookmark laten staan voor future reference. :)

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op donderdag 07 februari 2013 @ 18:21:
Wordt dit topic uiteindelijk ook verwijderd?
:D Nee, natuurlijk niet. Het hele idee van dit forum is dat mensen eerst zoeken in (eerdere/andermans) topics om te kijken of daar een oplossing voor hun probleem in staat. Of je nou met Google of onze eigen search op een topic stuit, het idee is dat iedereen er iets aan heeft en niet alleen jij ;) Waarom denk je dat (op 't moment van schrijven) 90.211 topics met 968.401 reacties in PRG alléén al hebben? Het is dan ook niet voor 't eerst dat je vraag voorbij komt hier ;)

[ Voor 62% gewijzigd door RobIII op 07-02-2013 18:36 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op donderdag 07 februari 2013 @ 18:32:
[...]

:D Nee, natuurlijk niet. Het hele idee van dit forum is dat mensen eerst zoeken in (eerdere/andermans) topics om te kijken of daar een oplossing voor hun probleem in staat. Of je nou met Google of onze eigen search op een topic stuit, het idee is dat iedereen er iets aan heeft en niet alleen jij ;) Waarom denk je dat (op 't moment van schrijven) 90.211 topics met 968.401 reacties in PRG alléén al hebben? Het is dan ook niet voor 't eerst dat je vraag voorbij komt hier ;)
Just checking :+
Ik had het gezien ja, alleen ook daar komt veel SET NAMES voorbij(wat ik al geprobeerd had). Zie alleen nu dat pedorus al eens eerder dit antwoord gegeven heeft. My bad :|

Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
offtopic:
Geen zorgen, dat kan ik me toch al niet meer herinneren. En bovendien heeft dit topic vast een betere TS ;) Overigens zoekt dit ook mooi met tags: http://tweakers.net/tag/C...lYyNdA1NzZQ0gExDC0MlWJrAQ

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Verwijderd schreef op donderdag 07 februari 2013 @ 18:07:
[...]


Dit doe ik in principe al door: SET NAMES uit te voeren.
In de docs van mysql_set_charset staat:

[...]
Het stukje wat je aanhaalt onderbouwd dan toch juist wat MueR aangeeft? ;)

Overigens is je charset in php.ini volgens mij ook niet goed, zeker op een Linux machine is het fout. Daar heb je meestal en_US.utf8 bijvoorbeeld (en dus ook gelijk je locale), niet alleen utf8. ;)
Of ik ben in de war. :)
Verwijderd schreef op donderdag 07 februari 2013 @ 18:21:
Alleen mysql_set_charset blijkt te werken. Wel vreemd dat veel tutorials toch SET NAMES aandragen als oplossing.
Kijk even naar de datum van wanneer die artikelen gepubliceerd zijn, wellicht zijn de oude artikelen? :)

[ Voor 28% gewijzigd door CH4OS op 07-02-2013 20:55 ]

Pagina: 1