Foute karakters

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Back-end programmeur

Functieomschrijving Heb jij recent jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een erkende werkgever in regio Waalwijk zijn wij op zoek naar een back-end developer. Kennis of ervaring met C# & SQL is een must! Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten; Je bent verantwoordelijk voor de beheer en ontwikkeling van de software; Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je test de software en ontwikkelt deze door; Je brengt de aanpassingssuggesties van klanten in kaart, om ze

Bekijk vacature »

Als Lead PHP developer bijdragen aan het onderwijs

Functie Als Lead PHP developer zet je samen met het team en de andere lead developers de technische lijnen uit als het gaat om het ontwikkelen van de applicaties en bepaal je samen met de PO waar elke sprint aan gewerkt zal worden. Je kunt op basis van een user story een goede aanpak formuleren en een planning opstellen, en andere hierin meenemen. Wanneer je team code schrijft verwacht je degelijke oplossingen, bij voorkeur gebruik makend van Domain Driven Design. Je ziet toegevoegde waarde in het beoordelen van het werk van collega’s om zo samen te streven naar hoge kwaliteit

Bekijk vacature »

Applicatieontwikkelaar ABAP

Bedrijfsomschrijving Functieomschrijving De kandidaat zal worden ingezet binnen een van de DevOps teams binnen SCI (Service Centrum Inburgering) voor het ontwerpen en bouwen in SAP ABAP van de binnen SCI gebruikte informatiesystemen. Voornaamste voorkomende werkzaamheden zijn het aanpassen van en bouwen van nieuwe programmatuur in ABAP (Objects), waarbij ook gebruikt wordt gemaakt van DDD (Domain Driven Design) en het opstellen/aanpassen van Functionele/Technische ontwerpen. Daarnaast moeten ook formulieren met SAP Smartforms worden aangepast. Verder speelt de overgang naar SAP4Hana en SAP CPI. Vanwege het veelvuldig gebruik van SAP PO is kennis hiervan een pré. Achtergrond opdracht Momenteel werken meerdere DevOps teams

Bekijk vacature »

Lead Fullstack developer

Functie omschrijving Ben jij een leergierige en ambitieuze junior developer met technische skills? Ben jij op zoek naar een werkgever die jouw de volledige vrijheid geeft om jezelf tot een volwaardige senior te ontwikkelen? Wij zijn op zoek naar een full stack developer die zich bezig wil bezig houden met het uitbreiden en verbeteren van de online webshop. Een onderdeel van jouw werkzaamheden is naast het beheren van de webshop ook om de processen en structuren te stroomlijnen. Werkzaamheden Onderhouden van de webshop (denk aan het bijhouden van de voorraad); Nieuwe functies toevoegen aan de product configurator door middel van

Bekijk vacature »

Software developer - senior

Functie omschrijving Voor een echt softwarebedrijf in omgeving Gouda zijn wij op zoek naar versterking voor de afdeling Software Development! Ben jij op zoek naar een werkgever waar meerdere software developers werken aan interessante projecten? Ben jij op zoek naar een werkgever waar je onderdeel wordt van een team dat echt passie heeft voor het ontwikkelen van software? Dan ben je hier aan het juiste adres! Als softwareontwikkelaar kom je terecht bij een onafhankelijk, door kwaliteit gedreven, doortastend en daarbij op een Agile wijze werkend bedrijf. Ben jij een expert in het vertalen van Componenten van Functionaliteit naar Business lagen?

Bekijk vacature »

Medior C# Developer

Samen met het development team zorg je ervoor dat alle systemen achter de schermen vlekkeloos werken. Wat doe je als Medior C# Developer bij Coolblue? Als C# developer doe je regelmatig mee aan brainstormsessies over user experience, data en task flow met de UX Designer, Product Owner en Data Scientist in je team. Daarnaast schrijf je op zichzelf staande, consistente en testbare code die goed onderhoudbaar en toekomstbestendig is. Ook C# Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Werken met verschillende soorten data-opslag, zoals Oracle of AWS. Problemen oplossen

Bekijk vacature »

Outsystems Developer Medior

Dit ga je doen Bouwen aan nieuwe en innovatieve applicaties; Maken van koppelingen tussen Outsystems en het bestaande applicatielandschap; Troubleshooting op bestaande software. Hier ga je werken De organisatie is internationale speler binnen de bouwbranche en richt zich op de infrastructuur, zowel boven als onder de grond. Ze zijn ruim 1100 man groot en maken op IT vlak een mooie groei door. Als ervaren Developer kom je te werken op een IT-afdeling van zo'n 25 man groot. Een aantal jaar geleden hebben ze de keuze gemaakt om zich meer te gaan richten op ontwikkeling en door de groei van de

Bekijk vacature »

Java Developer

Functie Wat ga je doen als Java developer? Jij komt terecht binnen een informeel team waarin je verantwoordelijk bent voor de backend systemen voor grote klanten als Ziggo en KPN. Als Medior Java developer werk je in teamverband en soms individueel. Gedurende de werkweek zal je veelvuldig sparren met je collega’s voor een goede implementatie van de software. Ben jij een echte Java developer? Ben je geïnteresseerd in de nieuwste technieken en de laatste ontwikkelingen? Dan ben je hier aan het juiste adres! Eisen Wat wordt er van jou verwacht? • Minimaal HBO/WO denk- en werkniveau; • Analytisch sterk, open

Bekijk vacature »

Software developer - C Sharp

Functie omschrijving Voor een opdrachtgever, met een prachtig kantoor in omgeving Wateringen zijn wij op zoek naar een software ontwikkelaar die graag werkt met C#, JAVA of Oracle. Heb jij interesse in het programmeren en ontwikkelen van software? En heb jij enige ervaring met Oracle databases en PL/SQL? Als software developer werk je met je collega's samen in een leuk en informeel team aan het (her)ontwerpen van bedrijfssystemen. Je houdt je bezig met het ontwikkelen van REST API's en je onderhoudt applicaties in Oracle PL/SQL en APEX. Vind jij het leuk om in een Agile/Scrum omgeving te werken? Wil jij

Bekijk vacature »

Lead Front-end developer

Functie Hun huidige applicatie worden ontwikkeld in o.a. React, Redux, TypeScript. Ze werken graag met de nieuwste technieken en tooling en zoeken ook developers die hier proactief op zoek naar gaan. Als senior/lead developer ben je een kartrekker in het team. Naast het meedenken over bijvoorbeeld de architectuur of toepassing van nieuwe technieken krijg je ook veel tijd om de meer junior (front-end) developers te begeleiden. Zo kun je bijvoorbeeld 1 dag in de week met 2 collega’s bezig zijn om samen met hen te kijken naar hun ontwikkeling, doelstellingen en uiteraard de gewenste begeleiding hierin. Hiernaast sta je als

Bekijk vacature »

Back-End Web Developer

Als Back-End Web Developer bij Coolblue zorg je ervoor dat onze webshops elke dag een beetje beter zijn. Wat doe je als Back-End Web Developer bij Coolblue? Als Back-End Web Developer werk je met andere development teams samen om onze webshop zo optimaal mogelijk te laten werken en onze klanten blij te maken. Als backend developer weet je de weg in PHP, kan je in Typescript een microservice op zetten of ben je bereid om dit te leren. Ook Web Backend Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen PHP

Bekijk vacature »

PHP developer

Functie omschrijving Voor een klein bedrijf in de buurt van Nieuwegein zijn wij per direct op zoek naar een talentvolle PHP developer. Er wordt veel ruimte geboden voor eigen initiateven, waardoor je een mooie stempel kan drukken op jouw eigen werkzaamheden (zowel operationeel als strategisch). Het bedrijf heeft middels externe programmeurs een multimedia platform ontwikkeld, maar willen geleidelijk de ontwikkeling naar binnen halen. Om die reden zoeken zij een communicatieve interne PHP developer die graag meebouwt aan het succesvolle product. Je gaat de volgende werkzaamheden verrichten: Platform beheren en programmeren (PHP, MySQL, JQuery, Javascript, XML & HTML); Communicatie en aansturing

Bekijk vacature »

Database ontwikkelaar

Functieomschrijving Wil jij aan gave logistieke softwareprojecten werken en bij een uniek softwarebedrijf in de regio van Tilburg? Wacht niet langer en reageer snel op deze vacature. Als Database ontwikkelaar ga je aan de slag het schrijven van stored procedures en verder uitbouwen van de SQL database. Je werkt in een database team, met allemaal mensen die energie krijgen van software en techniek. Verder krijg je als taak: Optimaliseren en uitbouwen van de MS SQL databases die gebruikt worden; Optimaliseren van query's, waardoor er efficiënter gewerkt kan worden; Je werkt met de technieken T-SQL of PL/SQL; Bij interesse kan je

Bekijk vacature »

SQL database developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als SQL database developer? Dit bedrijf bouwt applicaties om processen in distributiecentra te optimaliseren. Ter uitbreiding van het development team zijn wij op zoek naar een SQL database ontwikkelaar. Wil jij werken voor een groeiende werkgever in regio Breda waar jij de ruimte en tijd krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je houdt je bezig met het creëren en bouwen van MS SQL server databases; Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van logistieke processen; Je gaat projecten vanaf het begin tot het

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET ontwikkelaar start jij in een ontwikkelteam met 7 .NET developers. In ons team werken er drie senior .NET developer, twee medior .NET developers en twee junior .NET developers. Er is dan ook genoeg senioriteit in ons team om jou te kunnen bieden wat jij nodig hebt! Wij werken in scrum en hebben drie wekelijkste sprints. Daarnaast doen wij minimaal vier keer per jaar een release. Ons platform is ontzettend complex en groot. Het is dan ook in het begin belangrijk dat jij de processen gaat begrijpen. Jij krijgt dan ook een cursus om beter te begrijpen

Bekijk vacature »
Aad B

Aad B

02/12/2019 12:12:34
Quote Anchor link
Na complete migratie/upgrade van het OS (Debian) en dus naar MariaDB en php7 worden bijzondere karakters niet meer juist getoond op de webpagina. Het gaat hier om de simpele e-trema zoals in: België
In de database is het nog steeds okee, althans voor zover ik kan inschatten. Een select van de tabel, vanuit een ascii terminal (putty) geeft dit:

MariaDB [vaarweginfo]> select distinct land from vaarweginfo;

land
+-----------+
Nederland
België
Frankrijk

(als ik code tags hier omheen zet verdwijnt de ë compleet??)

De webpagina haalt het land op uit een tabel en toont België dan als België
Heeft onder MySQL en php5 tot dan toe goed gewerkt. Waar moet ik dit zoeken?
Gewijzigd op 02/12/2019 12:20:38 door Aad B
 
PHP hulp

PHP hulp

26/04/2024 01:09:54
 
- Ariën  -
Beheerder

- Ariën -

02/12/2019 12:24:18
Quote Anchor link
In de wereld van UTF-8 moet je dit zoeken.
Hoe heb je dit ingesteld in je site?
Gewijzigd op 02/12/2019 12:25:00 door - Ariën -
 
Aad B

Aad B

02/12/2019 12:33:55
Quote Anchor link
Ariën, wat bedoel je met ingesteld in je site?? Iets in het OS of Apache config of iets in de html pagina's zelf??
Gewijzigd op 02/12/2019 12:34:07 door Aad B
 
- SanThe -

- SanThe -

02/12/2019 12:43:51
Quote Anchor link
In <head> <meta charset="utf-8">
 
- Ariën  -
Beheerder

- Ariën -

02/12/2019 13:03:10
Quote Anchor link
Ik heb het over je site, en niet over je OS (Linux, Windows) of Apache (Webserver).
Ik neem aan dat je daar ook netjes UTF-8 afdwingt? Of gebruik je nog het beperkte iso-8859-X? En hoe staan de collaties van je databasetabellen?
Gewijzigd op 02/12/2019 13:04:22 door - Ariën -
 
Aad B

Aad B

02/12/2019 13:40:05
Quote Anchor link
SanThe en Ariën dank voor de tips, het was inderdaad charset=iso-8859-1 in plaats van utf-8 in de gegenereerde HTML pagina. Probleem opgelost.
 
- Ariën  -
Beheerder

- Ariën -

02/12/2019 13:43:24
Quote Anchor link
Maar de vraag is: Hie kan dit opeens aangepast zijn? Een verhuizing hoort niet te zorgen voor een verandering van je charset. Ik kan me wel indenken de encoding van je database aangepast kan zijn toen deze gedumpt werd, maar dat zou niet mogen.

Als ik jouw was zou ik het toch even goed uitzoeken voordat je allemaal rotzooi in je database staat te pompen en je nog verder van huis bent....
Gewijzigd op 02/12/2019 13:54:45 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

02/12/2019 14:30:48
Quote Anchor link
Wat @Ariën zegt.

NB: het volgende verhaal gaat uit van een database(tabel) met een utf8(mb4) encodering. Idealiter lopen alle character encoderingen (HTML document, database-connectie, database, database-tabel, database-kolom en last but not least de encodering van de data in deze kolom zelf) alle in de pas. GA DIT NA. Je kunt niet zomaar ergens "UTF-8" neerzetten in plaats van "ISO-whatever" en dan doen alsof daarmee de kous af is :p. Dit is echt het onheil over je afroepen.

---

De makkelijkste manier om na te gaan of alles ok is is door een check te doen hoe dit op byteniveau staat opgeslagen. Dit is namelijk een test die niet afhankelijk is van een specifieke character encoding en onafhankelijk van een ingestelde character encodering altijd hetzelfde resultaat oplevert. Dit stelt je dus in staat afwijkingen te constateren op het moment dat er op verschillende plekken verschillende encoderingen worden gebruikt. Dit is onwenselijk.

In MySQL doe je dit met de functie HEX() en in PHP is dit bin2hex().

Het is zaak dat je dit zowel in MySQL als PHP controleert. Het kan namelijk zo zijn dat je niet op de goede manier met de database communiceert. MySQL compenseert dit achter de schermen, maar dit kan dus inderdaad wel resulteren in het wegschrijven van verkeerd geëncodeerde data. Dit komt dan pas naar buiten op het moment dat er wijzigingen (die mogelijk reparaties zijn omdat je dus voorheen op een verkeerde manier met je database sprak) worden aangebracht in de communicatie met je database. Of wanneer je je tabellen exporteert/migreert.

Om dit alles goed te simuleren is het dus ook zaak dat als je deze tests aan de PHP-kant uitvoert dat je op dezelfde manier een verbinding maakt met je database zoals je dat ook in je applicatie/website zou doen.

Wat je doet is het volgende: haal de kolom waarin de landnaam België staat opgeslagen als volgt op:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
SELECT land, HEX(land) AS hex_land
FROM <tabelnaam>


Vervolgens controleer je de waarden in PHP. Hierbij geef je de hex-waarde uit de database weer en tevens het aan de PHP-kant gegenereerde equivalent met de oorspronkelijke land-kolom. Als het goed is komen deze twee waarden overeen. Indien dit niet het geval is houdt dit in dat de database zich genoodzaakt zag om vertalingen uit te voeren omdat de character encoding van de connectie afweek van de character encoding van de database-, tabel- of kolom-definitie.

Als $row het (associatief) record bevat toon je dit als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
echo 'waarde in MySQL: '.$row['land_hex'].'<br>';
echo 'waarde in PHP: '.strtoupper(bin2hex($row['land']));
?>

Beide waarde zouden -met een utf8(mb4) encodering- gelijk moeten zijn aan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
42656C6769C3AB

Hierbij gaat het eigenlijk uitsluiten om de laatste 4 karakters.

Mochten de waarden die uit worden gespuugd hiervan verschillen, of als de waarden onderling afwijken, dan zou ik je met klem aanraden om wat verder te graven om te zien waar deze verschillen vandaan komen.

En misschien loont het ook de moeite om de tabel "vaarweginfo" verder uit te normaliseren. Het lijkt mij beter om één landentabel aan te houden en hier middels id's aan te refereren, in plaats van letterlijke landnamen in de vaarweginfo-tabel op te slaan.

Aad B op 02/12/2019 12:12:34:
(als ik code tags hier omheen zet verdwijnt de ë compleet??)

Dit is waarschijnlijk een bug in deze website (interne link).

**snip**
Gewijzigd op 05/12/2019 08:31:27 door - Ariën -
 
Aad B

Aad B

04/12/2019 11:21:19
Quote Anchor link
Thomas, dank voor je uitgebreide toelichting, ik ga ermee aan de slag. Ik krijg sowieso al een andere uitkomst op de eerste query: 42656C6769EB. Het is me duidelijk dat er ergens wat discrepantie is in het traject database laden en presenteren met html/php. De (enige) tabel in de database wordt 2x per dag geladen vanuit een API van Rijkswaterstaat (middels lokale linux cron/mysql scripting, geen php). Het gaat om ongeveer 750 records per keer en vooraf wordt de tabel ge-truncate. Je opmerking om te normaliseren (land-landcode) is uiteraard juist maar gezien deze kleine tabel die alleen voor presentatie wordt gebruikt voor +/- 3 gebruikers niet nodig. Ik ga in ieder geval op zoek om de encoding in de hele keten consistent te krijgen. Best interessant en nogmaals dank!
 
Thomas van den Heuvel

Thomas van den Heuvel

04/12/2019 16:32:09
Quote Anchor link
42656C6769EB (dus EB in plaats van C3AB) is de latin1 encoding van de ë.

Als je dit vervolgens encodeert als UTF-8 dan resulteert dit in België.

Het is waarschijnlijk interessant om deze import verder onder de loep te nemen. Vraag is wat de character encoding is van de aangeleverde data (A), wat de charset is van de tabel(len) waarin je deze data wegschrijft (B), en welke character encoding wordt verondersteld bij het maken van de connectie (C).

Stel dat je doel is om alles weg te schrijven als UTF-8 (utf8(mb4) in MySQL) omdat je applicatie en tabeldefinities (B) van UTF-8 gebruik maken. Maar tegelijkertijd weet je dat de aangeleverde data (A) een of andere ISO-encodering heeft. Dit kun je dan automatisch laten vertalen naar UTF-8 door bij het maken van de verbinding aan te geven (C) dat er data met een ISO-encodering over de lijn dient te gaan. Dit doe je met set_charset().

set_charset() vormt in wezen een contract tussen jouw applicatie en de database. Dit contract valt in twee delen uiteen:
- jij moet er voor zorgen dat alle data die je aanlevert aan de database van deze character encoding is
- de database draagt er zorg voor dat deze, naar beste vermogen, data teruggeeft in deze voorgeschreven character encoding

En dit staat los van de character encoding die wordt gebruikt in de database, tabel of kolom van deze data. Dit houdt in dat als er een discrepantie bestaat tussen de ingestelde character encoding van de verbinding en de definities van de database MySQL zelf vertalingen uitvoert. Dit geldt zowel voor het uitlezen als het wegschrijven. Dit kun je bij een import in jouw voordeel gebruiken.

Maar wat dus heel belangrijk is is dat je weet (met name bij het wegschrijven dus) welke character encoding deze data heeft (en deze wat mij betreft altijd expliciet instelt, om geen enkele ruimte open te laten voor een andere interpretatie). Als de data ISO-whatever is (is min of meer equivalent met latin1) en je middels set_charset() utf8 of equivalent instelt, en de tabel waarin je dit wegschrijft dezelfde charset heeft als in de connectie is ingesteld, dan gaat MySQL dus geen vertalingen uitvoeren en wordt je data weggeschreven als latin1 in een utf8 tabel.

Dit is ook hetgene wat waarschijnlijk is veranderd. Voorheen had je mogelijk geen set_charset() ingesteld, de default van MySQL (en zelfs MariaDB) was een hele tijd -en is dit misschien nog steeds- latin1. Dus de hierboven beschreven automatische vertaling verliep automatisch. De default character encoderingen in Debian zijn mogelijk al utf8(mb4), dus dan worden die vertalingen dus niet meer uitgevoerd omdat die al gelijk lopen met je database. Dit zou een verklaring kunnen zijn voor wat er nu gebeurt.

Dus omdat de defaults zijn veranderd werkt dit niet meer. Dit onderstreept wat mij betreft het belang om altijd expliciet een character encoding in te stellen bij het maken van een database-connectie.
Gewijzigd op 04/12/2019 16:36:40 door Thomas van den Heuvel
 
Aad B

Aad B

04/12/2019 21:15:24
Quote Anchor link
Thomas, dank voor je wijze les. Mijn doel is nu om om alles weg te schrijven als UTF-8 (utf8(mb4) in MySQL.
In het huidige script, dat overigens geheel naar wens werkt, kan ik geen set_charset() doen. Het ophaalscript is geen php. De methode van ophalen van de data via de Rijksawaterstaat API is in een bash script, een eenvoudige wget met wat parameters in .wgetrc
Wellicht kan ik daar nog een parameter opgeven zoals --header='Accept-Charset:
Ik ontvang een .csv file en als ik in linux in vi of cat de file bekijk zie ik netjes: België
Lokaal ben ik nu alles aan het afstemmen op UTF-8 (utf8(mb4)

De presentatie, een middels php gegenereerde web pagina, is sinds gisteren al in orde nadat ik de tip van SanThe en Arien kreeg om de header aan te passen.
Gewijzigd op 04/12/2019 21:17:21 door Aad B
 
Thomas van den Heuvel

Thomas van den Heuvel

05/12/2019 01:36:01
Quote Anchor link
@Aad hm, maar je kiept dat middels een bashscript wel de database in denk ik? Mogelijk kun je daar dus wat dingen aanpassen. Als dit een LOAD DATA ... commando is dan kun je hierbij een CHARACTER SET opgeven als je weet wat de character encoding van de bron is. Uit de documentatie:
Quote:
If the contents of the input file use a character set that differs from the default (noot: die van de server), it is usually preferable to specify the character set of the file by using the CHARACTER SET clause.


*knip*
Edit:
Zo, en hier stopt de discussie over deze site. Dit is dus geen aanwinst voor andermans topic. Dat iets niet werkt kan je melden op de juiste plek, maar een hele discussie of negatieve off-topic hierover hoort hier NIET!
Gewijzigd op 05/12/2019 08:30:31 door - Ariën -
 
Aad B

Aad B

05/12/2019 09:39:36
Quote Anchor link
Thomas, het werkt inderdaad via een load data configuratie. De parameter [CHARACTER SET charset_name] staat er niet in, ik neem dat ook mee. Nogmaals dank voor de uitgebreide toelichting over charset issues.

@Ariën: De "knip" en edit????
Gewijzigd op 05/12/2019 09:40:27 door Aad B
 
- Ariën  -
Beheerder

- Ariën -

05/12/2019 09:50:56
Quote Anchor link
Dat was enkel een discussie die niks hiermee te maken had.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.