[php] utf8_decode gaat niet goed

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik maak gebruik van een webservice en krijg daar <?xml version="1.0" encoding="utf-8" ?> van terug. Ik wil deze informatie opslaan in mijn 3.xx MySQL dbs. Hiervoor converteer ik de data eerst naar ASCII door hem hier doorheen te halen.

code:
1
2
3
4
5
6
7
function decodeHTML($string)
{
    $trans_tbl = get_html_translation_table(HTML_ENTITIES);
    $trans_tbl = array_flip ($trans_tbl);
    $ret = strtr ($string, $trans_tbl);
    return utf8_decode(preg_replace('/&#(\d+);/me', "chr('\\1')",$ret));
}


Dit gaat met alle karakters goed, behalve met de ë. Als ik bijvoorbeeld het woord cliënten heb, dan maakt hij er cli?en van. ënt wordt dus vervangen door een ?. Dit gebeurd overigens op het moment dat ik het in de dbs zet. Als ik het vlak voor het in de dbs zetten echo, dan ziet het er goed uit.

Iemand een idee waar het hem in zit? Ik heb php.net al afgespit en hier ook gezocht.

Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Als het goed is vlak voordat je het in de db zet is het toch redelijk om aan te nemen dat er iets met het in de database zetten fout gaat en niet zozeer met de uff8_decode ?
[edit]
Weet het niet zeker, maar zou dit niet met collation & character sets te maken kunnen hebben ?

[ Voor 33% gewijzigd door TheRookie op 22-08-2005 16:44 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Interessant punt. Zou kunnen. Het is wel vaag,dat als ik het echo in IE en dan bekijk in notepad, dat het er dan goed uitziet. Hierna doe ik alleen nog maar een INSERT van die waarde en dan is hij al vernaggelt.

Acties:
  • 0 Henk 'm!

  • ShadowLord
  • Registratie: Juli 2000
  • Laatst online: 18-09 22:12
Als ik het dus goeb begrijp plop je de 'ë' dus in de DB? Mischien dat ik er naast zit, maar een addslashes() zal hier mischien wel kunnen helpen. Als MySQL de 'ë' als speciaal karakter ziet verklaart dat waarom deze EN de 2 opvolgende karakters verdwijnen.

[ Voor 5% gewijzigd door ShadowLord op 22-08-2005 17:09 ]

You see things; and you say, "Why?" But I dream things that never were; and I say, "Why not?"


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ja inderdaad shadowlord. Dat is ook het enige wat ik nog doe. Een normale addslashes.

semi-pseudo:
echo $string // ziet er goed uit
en dan "INSERT INTO tabel (tekst) VALUES (".addslashes($string).");" // niet meer goed.

[ Voor 23% gewijzigd door Verwijderd op 22-08-2005 17:16 ]


Acties:
  • 0 Henk 'm!

  • ShadowLord
  • Registratie: Juli 2000
  • Laatst online: 18-09 22:12
Zou je niet doen:
PHP:
1
mysql_query("INSERT INTO tabel (tekst) VALUES ('".addslashes($string)."');

Let dus op de ENKELE quotes die om de waarde heen staan! Zonder deze raakt MySQL serieus in de war.

You see things; and you say, "Why?" But I dream things that never were; and I say, "Why not?"


Acties:
  • 0 Henk 'm!

  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

en als je echo addslashes($string); na de 1e echo zet, wat zie je dan ?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm, ik heb het al gevonden. De utf8_decode functie vernaggelt de ë en niet de query. Vaag zeg.
Pagina: 1