Ik heb een SOAP welke via PHP connect met een MySQL database, daar gegevens uithaalt en teruggeeft. "Vroegah" was het allemaal ISO-8859-1 geëncode. In een project waarbij ik allerlei tabellen heb genormaliseerd, het interne "CMS" hierop heb aangepast en de SOAP server ook, heb ik alles omgezet naar UTF-8 omdat we steeds tegen problemen aanliepen met o.a. eurotekens en imports van externen die ook in UTF-8 aangeleverd worden.
Ik heb nu deze tabel:
Het veld `title_shop` kan een euro-teken ( € ) bevatten als het om een cadeaubon o.i.d. gaat. In de database (bekeken met MySQL Workbench) zie ik deze ook netjes als zodanig staan en dat is m.i. ook logisch aangezien de charset UTF8 is en de kolom (alle kolommen) als collation de table default hebben.
Als ik het artikel open binnen het CMS, dan zie ik het ook netjes in de database staan. Als ik het opvraag via SOAP krijg ik echter deze error:
Ik start de SOAP server met deze code:
En de WSDL heb ik ook zodanig gedefinieerd:
Toch krijg ik alsnog de melding dat ik geen valide UTF-8 uitspuug. Het stomme is: zodra ik de SoapServer als ISO-8859-1 opstart, dan krijg ik geen foutmelding (echter: dan ontbreekt het euroteken ook en wordt het een blokje.)
Van voor tot achter lijkt het me allemaal netjes UTF-8 te zijn, maar blijkbaar zie ik ergens iets over het hoofd. Iemand die mij aan een geniale ingeving kan helpen?
Ik heb nu deze tabel:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| delimiter $$ CREATE TABLE `data_article` ( `article_id` int(11) NOT NULL auto_increment, `title_shop` varchar(60) default NULL, `title_internal` varchar(70) default NULL, [...] `date_created` datetime NOT NULL default '1000-01-01 00:00:00', `date_modified` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, PRIMARY KEY (`article_id`), UNIQUE KEY `FAN_UNIQUE` (`fan`), UNIQUE KEY `barcode_UNIQUE` (`barcode`), KEY `department_id` (`department_id`), KEY `subcat_id` (`subcat_id`) ) ENGINE=InnoDB AUTO_INCREMENT=80606 DEFAULT CHARSET=utf8$$ |
Het veld `title_shop` kan een euro-teken ( € ) bevatten als het om een cadeaubon o.i.d. gaat. In de database (bekeken met MySQL Workbench) zie ik deze ook netjes als zodanig staan en dat is m.i. ook logisch aangezien de charset UTF8 is en de kolom (alle kolommen) als collation de table default hebben.
Als ik het artikel open binnen het CMS, dan zie ik het ook netjes in de database staan. Als ik het opvraag via SOAP krijg ik echter deze error:
code:
1
| \x80...' is not a valid utf-8 string |
Ik start de SOAP server met deze code:
PHP:
1
| $server = new SoapServer(WSDL_URL, array('encoding'=>'UTF-8', 'features' => SOAP_SINGLE_ELEMENT_ARRAYS)); |
En de WSDL heb ik ook zodanig gedefinieerd:
XML:
1
| <?xml version="1.0" encoding="utf-8"?> |
Toch krijg ik alsnog de melding dat ik geen valide UTF-8 uitspuug. Het stomme is: zodra ik de SoapServer als ISO-8859-1 opstart, dan krijg ik geen foutmelding (echter: dan ontbreekt het euroteken ook en wordt het een blokje.)
Van voor tot achter lijkt het me allemaal netjes UTF-8 te zijn, maar blijkbaar zie ik ergens iets over het hoofd. Iemand die mij aan een geniale ingeving kan helpen?
Tjolk is lekker. overal en altijd.