Speciale tekens icm PHP

Pagina: 1
Acties:
  • 114 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mede-tweakers,

Ik heb een klein probleempje met speciale tekens in php (en mysql).

Ik heb vb een veld, genaamd 'field', als ik daar iets invul en ik druk op 'Zend', dan krijg je een $_POST['field'] die ik in in een database stop.

Je krijgt dus gewoon een mysql_query die de inhoud van dat veld in een database rij stopt.

Nu kan je vb bij dat veld ook de letters é ä è etc invullen. Helaas, vult hij dat fout in bij mysql (?) en leest hij ze ook fout uit. Ik heb unicode aanstaan bovenaan mijn html.

Mijn vraag: Wat moet ik gebruiken als 'filter' als ik het wil invoeren bij mysql, en wat ik moet als filter gebruiken als ik het wil uitlezen?

(Met filter bedoel ik vb htmlspecialchars, htmlentities etc)

Ik heb verschillende dingen geprobeerd, maar ik kom er maar niet uit.

Kan iemand mij helpen, want ik vind werkelijk niks hierover op google :S


Alvast bedankt!

PS. Naast dat het moet functioneren, moet het ook veilig zijn, dus vb ook htmlspecialchars erin enz.

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Character encoding moet gewoon over de hele linie kloppen. Dus niet alleen 'iets van unicode aan hebben staan', maar gewoon wéten wat het moet zijn in de http headers, in je code, de connectie met de DB en in de definitie van alle tekstvelden van je database. :)

{signature}


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Unicode staat aan ja, maar ik zou graag willen weten wat ik moet toepassen als ik het veld erin wil gooien in de db, en als ik het eruit lees..

Acties:
  • 0 Henk 'm!

Verwijderd

PHP ondersteunt geen Unicode. dit komt pas met PHP6 welke nu erg alpha is.

PHP ondersteunt verder ASCII en extended ASCII van nature omdat een byte in 8bit is. zie de welbekende chart op www.asciitable.com voor de door PHP ondersteunde tekens. PHP maakt geen onderscheid tussen een byte en een teken. beide zijn een 8bit getal.

voor MySQL ligt het iets ingewikkelder omdat MySQL zelf meerdere tekensets ondersteunt. je kunt met de functie mysql_client_encoding() uitzoeken welke tekenset actief is en dan met mysql_real_escape_string() de sql filteren zodat deze veilig wordt ingevoegd in de database met respect voor de in gebruik zijnde tekenset. zie de MySQL documentatie voor meer info.

functies zoals htmlentities() of htmlspecialchars() doen slecht een tekstsubstitutie op bepaalde tekens welke volgens de html-standaard als onveilig zijn aangemerkt of anderzijds een speciale status hebben zoals bijvoorbeeld het euro-teken. het resultaat is een 7bit string oftewel standaard ASCII. veel browsers ondersteunen echter 8bit ASCII zonder veel problemen alhoewel het netter is om niet extended ASCII te gebruiken kan het eigenlijk geen kwaad.

heb je meer tekens nodig kijk dan eens naar de multibyte extensie maar vergeet niet dat je MySQL server ook deze tekensets moet ondersteunen en gebruiken. MySQL draait standaard geloof ik in latin1 wat wil zeggen 1byte per teken oftwel plain simple ASCII.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bij mijn phpmyadmin staat dit:

MySQL Karakterset: UTF-8 Unicode (utf8)
MySQL verbindingscollatie: utf8_unicode_ci

Acties:
  • 0 Henk 'm!

  • r0bert
  • Registratie: September 2001
  • Laatst online: 30-07 02:32
Je moet je header (bijv in PHP) op UTF-8 zetten. Je moet je database/tabellen/velden juist instellen UTF8 (kies maar). En als je data schrijft naar of luist uit MySQL moet je dit ook opgeven, door voordat je een query uitvoert dat aan te geven.
MySQL:
1
SET NAMES 'UTF8'
of utf-8?
Volgens mij moet het dan werken.

Verwijderd

Topicstarter
Ik zal het even proberen

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Er staat al in mijn phpmyadmin:

MySQL Karakterset: UTF-8 Unicode (utf8)

Dus hij is nu al gezet naar UTF-8?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt, het is gelukt! :D

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Verwijderd schreef op dinsdag 21 augustus 2007 @ 17:56:
PHP ondersteunt geen Unicode. dit komt pas met PHP6 welke nu erg alpha is.
PHP ondersteund Unicode door middel van de mb_* functies. Veel gewone functies hebben echter problemen (overzicht) met Unicode strings.

Acties:
  • 0 Henk 'm!

Verwijderd

PrisonerOfPain schreef op zaterdag 25 augustus 2007 @ 16:11:
[...]


PHP ondersteund Unicode door middel van de mb_* functies. Veel gewone functies hebben echter problemen (overzicht) met Unicode strings.
klopt. ik had nog niet gezien dat ze de UTF-8 charset hadden toegevoegd. het is al weer een tijdje geleden dat ik met de mb_* functions heb mogen stoeien. je moet nog wel steeds de php.ini goed instellen en het is nog steeds niet native, dus veel functie's kunnen problemen hebben met UTF-8 strings maar toch het is een begin.

met PHP6 wordt unicode eindelijk native en zal elke functie die met PHP strings werkt unicode 'aware' moeten zijn. het zou een keer tijd worden want de mb_* functies zijn natuurlijk een lapmiddel.
Pagina: 1