[PHP + MSSQL] special chars INSERT INTO DB gaat fout :(

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • FitNiX
  • Registratie: April 2001
  • Laatst online: 01-09 15:18
Ik heb het volgende probleem:
Ik heb een PHP-pagina's die gekoppeld zijn aan een MSSQL database. Dit werkt op zich allemaal wel goed. Mensen vullen m'n formulieren in, en verzenden deze en alles wordt netjes en correct in de database ingevuld.


Het gaat echter fout als bijvoorbeeld iemand Tiësto met zijn achternaam heet :P
het probleem is dan dat de naam in de database komt te staan als:
Tidsto. :?
Er wordt tevens een bestand mee ge-upload. het bestand word in een archive map opgeslagen als bestand-Kermit-Tiësto.doc. Vervolgens kan ik vanuit mijn applicatie het meegestuurde bestand dus niet meer benaderen omdat het pad naar de file zo wordt opgeslagen in de Database:
bestand-Kermit-Tidsto.doc
En de file in de Archive folder heette ie dus:
bestand-Kermit-Tiësto.doc


Ik heb al meerdere standaard functies geprobeerd, maar nix werkt :'(
PHP:
1
2
3
4
5
6
htmlspecialchars(); //Tidsto
htmlentities();     //Tiësto
rawurlencode();     //%20Ti%EBsto
urlencode();           //+Ti%EBsto
rawurldecode();     //Tidsto
urldecode();           //Tidsto



Wie kent het probleem en heeft er een oplossing voor? Of, wie heeft er tips voor me


Op Google is er ook geen reet over te vinden :'(
Het probleem ligt hem dus niet in de PHP code lijkt me, want daar blijft die ë altijd bewaart. Het gaat fout op het moment dat die string daadwerkelijk in de MS Database wordt gezet.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je moet eens kijken naar de gebruikte encoding. Zaken als UTF8 enzo.

Acties:
  • 0 Henk 'm!

  • FitNiX
  • Registratie: April 2001
  • Laatst online: 01-09 15:18
djluc schreef op 30 augustus 2004 @ 17:06:
Je moet eens kijken naar de gebruikte encoding. Zaken als UTF8 enzo.
Dat was het enige wat ik idd op Google kon vinden, jij bedoeld waarschijnlijk dit:
HTML:
1
2
<META http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
<META http-equiv="Content-Type" content="text/html; charset=UTF8">

Die heb ik tussen de <HEAD></HEAD> geplaatst, maar het helpt geen fluit :?


[edit]Topic was dus nie op slot :o Mooie nieuwe feature :)
Echter nog niet helemaal bug-vrij :P[/edit]

[ Voor 81% gewijzigd door FitNiX op 30-08-2004 17:30 ]


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Je voorbeeldje is inderdaad bedoeld voor HTML. Je had het echter over je database. Ook daar kan je instellingen met betrekking tot de character sets.

Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Googlen op mssql special chars bracht mij hier waar een URL staat die je wellicht kan helpen.


edit: is toch meer met ASP .NET


Hier staat nog wat van iemand die het opgelost heeft door het veldtype van ntext naar text te veranderen.

[ Voor 27% gewijzigd door GlowMouse op 30-08-2004 17:36 ]


Acties:
  • 0 Henk 'm!

  • FitNiX
  • Registratie: April 2001
  • Laatst online: 01-09 15:18
djluc schreef op 30 augustus 2004 @ 17:24:
Je voorbeeldje is inderdaad bedoeld voor HTML. Je had het echter over je database. Ook daar kan je instellingen met betrekking tot de character sets.
De database is echter gemaakt door iemand anders, ik weet niet of het verstandig is om die zomaar te gaan wijzigen. Tevens, als ik via de Enterprise Manager alsnog die ë erin zet, dan onthoud ie hem wel gewoon goed. Het lijkt er dus op dat de character set van de database wel goed is.


@ GlowMouse:
Dat is idd ASP.net... Dit is PHP

[ Voor 6% gewijzigd door FitNiX op 30-08-2004 17:35 ]


Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Kermit schreef op 30 augustus 2004 @ 17:32:
[...]
De database is echter gemaakt door iemand anders, ik weet niet of het verstandig is om die zomaar te gaan wijzigen. Tevens, als ik via de Enterprise Manager alsnog die ë erin zet, dan onthoud ie hem wel gewoon goed. Het lijkt er dus op dat de character set van de database wel goed is.


@ GlowMouse:
Dat is idd ASP.net... Dit is PHP
Characterset van de dbase zal wel goed zijn, characterset van php zal wel goed zijn, ze zullen alleen zeer waarschijnlijk niet gelijk zijn :)

Acties:
  • 0 Henk 'm!

  • FitNiX
  • Registratie: April 2001
  • Laatst online: 01-09 15:18
Gomez12 schreef op 30 augustus 2004 @ 18:15:
[...]


Characterset van de dbase zal wel goed zijn, characterset van php zal wel goed zijn, ze zullen alleen zeer waarschijnlijk niet gelijk zijn :)
Dan is m'n vraag, hoe kan ik die gelijk maken of zetten? Of wat moet ik invoegen om de juiste te krijgen :P

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Onderzoek eens met welke character sets PHP en MSSQL werken? Dan weet je toch ook of ze verschillend zijn?

Acties:
  • 0 Henk 'm!

Verwijderd

code:
1
2
3
4
5
6
7
8
9
10
11
12
En daarbij, is het erg als er in de database Ti&euml;sto staat?
PHP heeft vast wel een functie die htmlentities ongedaan kan maken,
en je Tiësto terug geeft.
Deze kan je natuurlijk ook zelf schrijven, kan niet moeilijk zijn.


En in een browser wordt Ti&euml;sto niet als Ti&euml;sto maar als Tiësto getoond
(vandaar de naam van de functie).


Kijk eerst maar naar de char. sets, maar zelfs met een verschillende char. set,
zie ik het probleem niet ;)



edit: even in code-gezet, anders slaat het natuurlijk op niets ;) ik heb echt geen idee hoe ik ervoor zorg dat mijn tekst letterlijk overgenomen wordt, en niet geïnterpreteerd wordt door de browser.

[ Voor 31% gewijzigd door Verwijderd op 31-08-2004 00:29 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op 31 augustus 2004 @ 00:26:
edit: even in code-gezet, anders slaat het natuurlijk op niets ;) ik heb echt geen idee hoe ik ervoor zorg dat mijn tekst letterlijk overgenomen wordt, en niet geïnterpreteerd wordt door de browser.
offtopic:
Door &amp; te gebruiken in plaats van &. ;) Dus Ti&amp;euml;sto wordt Ti&euml;sto.

[ Voor 4% gewijzigd door NMe op 31-08-2004 01:22 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • FitNiX
  • Registratie: April 2001
  • Laatst online: 01-09 15:18
Verwijderd schreef op 31 augustus 2004 @ 00:26:
code:
1
2
3
4
5
6
7
8
9
10
En daarbij, is het erg als er in de database Ti&euml;sto staat?
PHP heeft vast wel een functie die htmlentities ongedaan kan maken,
en je Tiësto terug geeft.
Deze kan je natuurlijk ook zelf schrijven, kan niet moeilijk zijn.

En in een browser wordt Ti&euml;sto niet als Ti&euml;sto maar als Tiësto getoond
(vandaar de naam van de functie).

Kijk eerst maar naar de char. sets, maar zelfs met een verschillende char. set,
zie ik het probleem niet ;)


edit: even in code-gezet, anders slaat het natuurlijk op niets ;) ik heb echt geen idee hoe ik ervoor zorg dat mijn tekst letterlijk overgenomen wordt, en niet geïnterpreteerd wordt door de browser.
Als ik hem inderdaad in mijn browser zou tonen, dan zou het inderdaad geen probleem zijn, dan loste ik het wel anders op, Probleem ligt hem in het feit dat de naam wordt weggeschreven in een MSSQL database, en wordt uitgelezen door een applicatie bij m'n werk... ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Kermit schreef op 31 augustus 2004 @ 09:36:
[...]
Als ik hem inderdaad in mijn browser zou tonen, dan zou het inderdaad geen probleem zijn, dan loste ik het wel anders op, Probleem ligt hem in het feit dat de naam wordt weggeschreven in een MSSQL database, en wordt uitgelezen door een applicatie bij m'n werk... ;)
die 'applicatie', zijn dat nou je php pagina's uit je openingspost? In dat geval, als je er zelf controle over hebt, moet je ze toch zodanig aan kunnen passen dat de juiste characters getoond worden :?

Of is het een of andere (legacy) app, waar niets aan veranderd kan worden? Dan moet die app natuurlijk zelf met special characters om kunnen gaan, anders zul je het probleem nooit kunnen oplossen

Tip: lees http://www.joelonsoftware.com/articles/Unicode.html Utigebreid achtergrondartikel waarin alles staat wat je als programmeur over Unicode en encoding moet weten

Acties:
  • 0 Henk 'm!

  • FitNiX
  • Registratie: April 2001
  • Laatst online: 01-09 15:18
Verwijderd schreef op 31 augustus 2004 @ 09:46:
[...]

die 'applicatie', zijn dat nou je php pagina's uit je openingspost? In dat geval, als je er zelf controle over hebt, moet je ze toch zodanig aan kunnen passen dat de juiste characters getoond worden :?

Of is het een of andere (legacy) app, waar niets aan veranderd kan worden? Dan moet die app natuurlijk zelf met special characters om kunnen gaan, anders zul je het probleem nooit kunnen oplossen

Tip: lees http://www.joelonsoftware.com/articles/Unicode.html Utigebreid achtergrondartikel waarin alles staat wat je als programmeur over Unicode en encoding moet weten
Wij hebben binnen het bedrijf een CRM pakket die verbonden is met een MSSQL database.
Ik heb zelf een aantal PHP pagina's gemaakt die dingen wegschrijft in diezelfde Database. Echter gaat het fout op het moment ik er een ë in probeer weg te schrijven. :'(
Het suffe is echter dat als ik via Enterprise Manager alsnog die ë met de hand erin zet, dan blijft ie wel goed bewaart :?

Edit: Bedankt voor die link, ga meteen lezen :)

[ Voor 5% gewijzigd door FitNiX op 31-08-2004 09:53 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Even een kickje voor een oud topic, sowwy for that ;)
Maar ik dacht dat het mischien handig zou zijn voor de volgende die hier tegenaan loopt.

Ik kwam vandaag hetzelfde probleem tegen op m'n forum (phpbb + mssql)

De oplossing vond ik hier: http://nl2.php.net/function.mssql-connect.

Door de functie: automatic ANSI to OEM conversion uit te vinken was bij mij het probleem verholpen.

mssql server -> Client Network Utility -> DB Library options -> automatic ANSI to OEM conversion -> uitvinken

Het enige wat ik erg vreemd vind is dat ik hier voorheen geen problemen mee heb gehad, ik ben nooit in de buurt geweest van die optie :?
Pagina: 1