If $parameter

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Team Lead Java Developer

Functie Wat ga je doen als Java developer? Als Team Lead Java Developer draag een grote verantwoordelijk je stuurt ontwikkelaars aan en staat dagelijks in contact met jou ICT Manager. De team Bestaat uit front-end en backend systemen. Je ben in staat op hoog niveau de technische vak te bepalen en ook te bewaren. Je dag zie er als volgt uit, ontwikkelen van nieuwe en bestaande applicaties, het uitvoeren van processen en analyses en het beschrijven van functioneel ontwerpen. Ook zal samen met jouw Tester applicaties gaan testen door middel van peer reviews en het leveren van support aan gebruikers

Bekijk vacature »

Hands-on Solution Architect / Software Architect (

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Solution Architect / Software Architect op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je werkt samen met gedreven DevOps teams, bestaande uit frontend, backend en middleware developers, testers, UX-designers. Samen met de teams ben je continu op zoek naar de beste oplossingen voor onze klanten. Als Solution Architect onderzoek

Bekijk vacature »

.NET developer

Functie Als senior .NET ontwikkelaar en aankomend lead developer ben jij in één van de drie development teams verantwoordelijk voor het volgende: • Jij hebt een oogpunt op modernisering en bent verantwoordelijk voor de technische staat en architectuur van de applicatie; • Jij bent verantwoordelijk voor het reviewen van de technische haalbaarheid van verschillende onderwerpen; • Jij bent verantwoordelijk voor een goede aansluiting binnen het multidisciplinaire team en de bijbehorende taken; • Jij bent verantwoordelijk voor het aandragen van verbetervoorstellen en ontwikkelstandaarden in zowel de techniek als architectuur; • Jij bent meewerkend voorman en ondersteunt en coacht jouw team op

Bekijk vacature »

Junior PHP Developer

Dit ga je doen Software development met behulp van C# .NET en / of PHP, je mag zelf kiezen waar jij je in wil specialiseren Meedenken over het nieuwe pakket, waar moet het aan voldoen? Unit-, integratie- en diverse andere tests schrijven en uitvoeren Nauw samenwerken met je IT collega's zoals Testers, Developers, DevOps Specialisten en Architecten Jezelf ontwikkelen met behulp van trainingen en cursussen Hier ga je werken Onze klant, een grote speler in de medische sector, is op zoek naar een enthousiaste junior (of meer ervaren) Software Developer die klaar is voor een nieuwe stap in zijn of

Bekijk vacature »

Applicatie ontwikkelaar

Functie omschrijving Zelfstandige applicatie ontwikkelaar gezocht voor familiair bedrijf in omgeving Capelle ad Ijssel Ben jij op zoek naar een nieuwe uitdaging en zoek jij een informele werkgever waar je zelfstandig kunt werken binnen een leuk IT team, lees dan snel verder want wie weet zijn wij op zoek naar jou! Een deel van jouw werkzaamheden: Onderhouden en ontwikkelen van de IT systemen; Opzetten van Azure Cloud systemen, denk aan interfaces, hardware op de Cloud, webportalen of BI functies; Werken aan scripts binnen verschillende software applicaties, denk aan ERP en CAD; Ontwikkelen en implementeren van MS PowerApps en Power BI.

Bekijk vacature »

Front end developer React Sportgames

Functie Als Front end developer ga jij aan de slag bij een gave en bekende organisatie op het gebied van sportgames. Jij gaat aan de slag in een scrumteam met 6 developers die gepassioneerd en actief bezig zijn om spelers kwalitatieve en mooie spelervaringen aan te bieden. Als scrumteam werken ze in drie wekelijkse sprints en begin je iedere ochtend met een stand-up. Als Front end developer werk jij bij deze organisatie voornamelijk met Javascript, html, css en React. Er wordt veel gebruikt gemaakt ook van C#, Docker en Kubernetes. Het team hecht veel waarde aan het leveren van hoogwaardige

Bekijk vacature »

Back-end Developer

Functieomschrijving Heb jij kort geleden je HBO ICT Informatica diploma in ontvangst mogen nemen? Of heb je een aantal jaar ervaring als Software Developer en ben je klaar voor een nieuw hoofdstuk in jouw carrière? Voor een gewaardeerde werkgever in de regio van Goirle zijn wij op zoek naar een junior/medior Back-end Developer met affiniteit met MS Acess. Samen met een vooruitstrevend team ben je verantwoordelijk voor het ontwikkelen van maatwerk software voor hun klanten. Je hebt kennis of ervaring van SQL en affiniteit met MS Acess. Je bent klantvriendelijk en flexibel ingesteld en vindt het leuk om klanten te

Bekijk vacature »

Oracle Apex developer

Bedrijfsomschrijving My client is a technology company based in Den Bosch, the Netherlands. They specialize in providing innovative software solutions to clients, and they are currently looking for an experienced Oracle Apex developer to join the IT team. Functieomschrijving As an Oracle Apex developer, you will be responsible for designing, developing, and maintaining web-based applications using Oracle Apex. You will work closely with project managers, business analysts, and other developers to ensure that clients' needs are met and that the software solutions are of the highest quality. Responsibilities: Design, develop, and maintain Oracle Apex applications. Work with project managers and

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Back End Developer

Als Back End developer bij KUBUS houd je je bezig met het ontwikkelen van de (web)applicatie en services van BIMcollab. Je hebt een focus op de back end van onze software, daarvoor werken wij hoofdzakelijk met C# en .NET. Wij hanteren een full-stack benadering, wat betekent dat je naast de back-end ook meehelpt bij andere onderdelen van de code. Als softwarebedrijf bevindt KUBUS zich in een unieke positie. We bouwen aan onze eigen producten die wereldwijd door tienduizenden gebruikers worden gebruikt. Ons bedrijf heeft precies de juiste grootte: groot genoeg om echt impact te maken in de markt, maar klein

Bekijk vacature »

Lead developer

Functie Als Lead developer wordt jij onderdeel van een multidisciplinair team van circa 23 software engineers. Als team werken jullie agile en zijn termen als Continuous Integration en Continuous Delivery dagelijkse koek. Jullie werken aan uitdagende en afwisselende projecten met als doel klanten een totaal oplossing aan te kunnen bieden. Jij wordt verantwoordelijk voor complete projecten waarbij jij als verantwoordelijke zorgt dat het project op de juiste manier blijft draaien. Zo haal jij ook de requirements op bij de klant en kijk jij samen met het team en met de salesafdeling hoeveel uren hiervoor nodig zijn. Daarnaast stuur jij jouw

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Senior Front-End Developer

Als Senior Front-End Developer bij Coolblue verbeter je de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Wat doe je als Senior Front-End Developer bij Coolblue? Als Senior Front-end Developer werk je aan de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Je vindt het leuk om samen te werken met de UX designer om stories op te pakken. Daarnaast ben je trots op je werk en verwelkomt alle feedback. Ook Senior Front-end Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Verbeteren van de gebruiksvriendelijkheid van onze webshop voor miljoenen klanten. Nadenken

Bekijk vacature »

Software Developer

Bij een bedrijf in de machinebouw, regio Roosendaal, zijn we op zoek naar een: Software Developer Waar ga je werken? Onze opdrachtgever is gespecialiseerd in de grondverzetmachines. Al meer dan 50 jaar leveren ze zowel nationaal als internationaal diverse machines. Het is een familiebedrijf met een informele werksfeer. Wat ga je doen? Als Software Developer je verantwoordelijk voor: - Je werkt voortdurend aan oplossingen voor het op afstand bewaken en besturen van oogstmachines; - Het visualiseren van gegevens in rapporten, apps of andere formaten; - Voorspellend machineonderhoud; - Taakplanning; - Je schrijft aangepaste plug-ins om gegevens te importeren of exporteren

Bekijk vacature »

Full stack developer Node.js, React Remote

Functie Als fullstack JavaScript developer vind jij het uitdagend om op basis van concrete klantvragen nieuwe functionaliteiten te ontwikkelen. Bij voorkeur worden deze functionaliteiten op een bepaalde manier geprogrammeerd, zodat ze door meerdere klanten te gebruiken zijn. Je hebt dus vaak te maken met abstracte vraagstukken. Om dit te kunnen realiseren sta je nauw in contact met de product owner en/of klant. Je bent niet alleen onderdeel van het development team, maar hebt ook vaak contact met de product-owner en/of klanten om daardoor inzichten te verzamelen die leiden tot productverbeteringen. • Inzichten verzamelen bij de klant en/of product owner •

Bekijk vacature »
Bart Kok

Bart Kok

07/09/2015 21:16:13
Quote Anchor link
Ik ben momenteel aan het experimenteren met php. Ik zou graag een berekening uit laten voeren, waarbij met de input van een form dingen worden berekend.

Als aangevinkt wordt dat mensen een nieuwe koelmachine aanvinken moet waarde 3 worden ingevuld. Indien geen nieuwe waarde wordt aangevinkt, is een andere reeds bekende $parameter geldig(middels een lijst met waarden).

$copkoelmachinenieuw = $_POST['vernieuwenkoelmachine']; // ja of nee, waarbij value bij nieuw is 3 en bij nee $copkoelmachineoud

$copkoelmachineoud = $_POST['COP'];

Hoe krijg ik dit werkend? Heb al aantal dingen geprobeerd, maar blijkbaar mis ik nog wat kennis.

Alvast bedankt!
 
PHP hulp

PHP hulp

15/01/2025 17:04:31
 
- Ariën  -
Beheerder

- Ariën -

07/09/2015 21:19:51
Quote Anchor link
Ik neem aan dat je wilt controleren of een checkbox aan is gevinkt? In dat geval moet je controleren of deze een $_POST-waarde meegeeft. Als deze aan is gevinkt, dan doet hij dan, en anders niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
if(isset($_POST['vinkboxje'])) {
    // ja, er is gevinkt.
} else {
    // Nee, we hebben geen vink te pakken
}
?>
 
Bart Kok

Bart Kok

07/09/2015 21:45:57
Quote Anchor link
if(isset($_POST['vinkboxje'])) {
// dan is de waarde zoals invuld bijv. value="3" bijhorend bij de radiobox
} else {
// Nee, dan wordt gekozen $_post:['COP']
Bouwjaar huidige koelmachine:
<select name="COP">
<option value="2">1990 - 2000</option>
<option value="2.5">2000 - 2010</option>
}
?>
 
- Ariën  -
Beheerder

- Ariën -

07/09/2015 21:51:24
Quote Anchor link
Mijn code is de afhandeling. Dit staat los van de HTML-formulierelementen
 
Michael -

Michael -

08/09/2015 12:09:39
Quote Anchor link
Je kunt beter even een basis php en html tutorial opzoeken.
Je kunt namelijk niet zomaar html in php gooien, deze moet dan in een echo geplaatst worden of buiten de php.
Let ook op hoofdletters en typfouten
$_post:['COP'] zou moeten zijn $_POST['COP']
Een formulier plaats je altijd in een <form> en dient wel een button of submit te hebben.
Select dien je ook weer te sluiten.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if($_SERVER['REQUEST_METHOD'] == 'post') {
// hierin doe je alle afhandelingen wanneer het formulier is gepost

if(isset($_POST['vinkboxje'])) {
    $waarde = 3;
}
else {
    $waarde = $_POST['COP'];
}


echo $waarde;

}

?>

<form method="POST">
<select name="COP">
<option value="2">1990 - 2000</option>
<option value="2.5">2000 - 2010</option>
</select>

<input type="checkbox" name="vinkboxje" />
<button>Post</button>

</form>
Gewijzigd op 08/09/2015 12:11:11 door Michael -
 

08/09/2015 12:47:40
Quote Anchor link
Het volgende gaat waarschijnlijk te ver voor de vragensteller?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if($_SERVER['REQUEST_METHOD'] == 'post') {

gebruik ik ook wel eens, maar ik dacht dat 'POST' dan met hoofdletters moest, tenminste zo staat het wel in het voorbeeld http://php.net/manual/en/reserved.variables.server.php .

Er staat ook een (misschien out-of-date) waarschuwing tegen arbitrary methods, en volgens mij was het zo dat je dit soort waarden zowieso als tainted moet beschouwen omdat ze client-side worden ingesteld.
Kan je dan niet beter iets doen als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] === 'POST') {
?
 
Ward van der Put
Moderator

Ward van der Put

08/09/2015 13:05:02
Quote Anchor link
Dat is een lang verhaal maar hiermee speel je op safe:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (isset($_SERVER['REQUEST_METHOD']) && strtoupper($_SERVER['REQUEST_METHOD']) === 'POST')

$_SERVER wordt gevuld door de webserver, dus kun je bij sommige webservers afwijkende resultaten krijgen. $_SERVER['REQUEST_METHOD'] kan bijvoorbeeld ontbreken als het PHP-script via een commandline (zoals een cronjob) wordt aangeroepen. Vandaar dat je dit voor maximale compatibiliteit beter met isset() kunt ondervangen.
 

08/09/2015 13:21:49
Quote Anchor link
Prachtig :) Nu las ik in het verhaal achter de link dat er voor PHP het voorbeeld wordt gegeven met strtoupper. Maar, om mijn applicatie helemaal Unicode compliant te maken met UTF-8, heb ik onder andere juist alle strtoupper() calls veranderd naar mb_strtoupper(). Zit je daarmee meer of minder veilig? Want strtoupper() werkt naar gelang de locale die is ingesteld...

Als ik het goed begrijp van http://stackoverflow.com/questions/4400678/http-header-should-use-what-character-encoding moet de HTTP header in US-ASCII gecodeerd zijn. Omdat US-ASCII altijd een subset is van UTF-8, ben ik geneigd te zeggen dat je met mb_strtoupper() altijd goed zit. Van strtoupper() weet ik het niet zeker, het zou kunnen dat als er een andere locale wordt ingesteld, bv. met setlocale(), het niet goed werkt. Daar komt bij dat setlocale() ook nog eens niet thread safe is, en dan heb je een extra (klein) veiligheidsrisico, het kan daar gaan rammelen, als een ander script een andere locale instelt.
Van http://php.net/manual/en/function.setlocale.php :
Quote:
Warning
The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server API like IIS, HHVM or Apache on Windows, you may experience sudden changes in locale settings while a script is running, though the script itself never called setlocale(). This happens due to other scripts running in different threads of the same process at the same time, changing the process-wide locale using setlocale().

Oke, het is wel een tikje paranoïde, het gaat vast en zeker vrijwel altijd goed anders hadden we hier wel meer over gehoord. Toch?
Gewijzigd op 08/09/2015 13:25:12 door
 
Ward van der Put
Moderator

Ward van der Put

08/09/2015 13:57:53
Quote Anchor link
Alle HTTP-methoden kun je sowieso in 7-bit ASCII uitspellen, dus als strtoupper($_SERVER['REQUEST_METHOD']) een onverwachte string oplevert, was de HTTP-methode per definitie al ongeldig.

Er is geen door PHP ondersteunde karakterset waarin de hoofdletters POST niet in de eerste 7 bits staan. Verschillen ontstaan pas vanaf de 8e bit.

Ik denk dat je het voor de veiligheid hier dus zou moeten omkeren: niet erop vertrouwen dat je overal correcte en volledige UTF-8 kunt afdwingen. (Hacks met 16-bits karaktersets maken daarvan namelijk dankbaar misbruik.) Staat er ongeacht karakterset en ongeacht locale niet 'POST', dan weet je al genoeg.
 
Bart Kok

Bart Kok

10/09/2015 09:32:02
Quote Anchor link
Dank jullie voor de hulp! Het is mij inmiddels gelukt het werkend te krijgen.

HTML en PHP had ik uiteraard los staan. Had het daarna gedaan zoals aangegeven door AAR, alleen was bij mij een fout ingeslopen, waardoor het niet direct werkte...

Toch maar meer verdiepen in PHP, mogelijkheden zijn oneindig ;-)
 

11/09/2015 20:28:06
Quote Anchor link
@Ward, Ik heb het nog even nagebrowsed, en mb_strtoupper() kan je net zo goed gebruiken. En het is inderdaad zo dat je bij UTF-8 invoer van de browser van te voren moet checken of er geen ongeldige byte sequences zijn. Ergo strtoupper() is uiteindelijk simpeler en net zo doeltreffend.

Ondanks dat logica in deze te kort schiet wil ik voor het oog liever alles multibyte-compatible houden, en zal ik mb_strtoupper() blijven gebruiken. Op de één of andere manier vind ik eleganter staan omdat het dan consistenter / gelijkvormiger is met de rest van mijn code.

Off-topic: nog even wat historie van ASCII bekeken, en toen kwam het weer naar boven dat een van key-features van de uiteindelijke ASCII-standaard juist is dat de printable charachters op vaste code-points zitten waarmee ASCII in hoge mate compatible is met codepages van zichzelf, dit in tegenstelling tot oudere encoding schema's als EBCDIC. EBCDIC codepages zijn niet bijzonder compatible met andere EBCDIC codepages, inclusief special characters, die weer op andere codepoints zitten. Bij EBCDIC maakt het enorm uit met welk encoding schema je source bestanden zijn opgeslagen. PHP maalt er totaal niet om, omdat de parser (net als andere talen) dankbaar gebruik kan maken van de vaste codepoints van (US-)ASCII. Onlangs had ik nog nageplozen dat PHP dus ook met UTF-8 uit te weg kan, omdat UTF-8 encoding juist zo is gemaakt dat het alleen encodeert met de 8e bit er bij, en daarmee is UTF-8 volledig ASCII-compatible. Dus andere encoding schema's die niet volledig compatible zijn met ASCII zullen problemen geven voor de PHP parser. Volgens mij geven onder andere UTF-16 en UTF-32 problemen.
 
Eddy E

Eddy E

12/09/2015 17:33:32
Quote Anchor link
De vraag rijst dan ook: waarom UTF-16 gebruiken? Welke lettercodes heb je nodig die niet in UTF-8 staan, in je PHP-code?
 

12/09/2015 18:00:18
Quote Anchor link
(Nog steeds) Off-topic:

Er zijn (multinationale) bedrijven die als bedrijfsregel hebben dat data in databases opgeslagen moet zijn als UTF-16. JavaScript werkt facto de standaard met UTF-16. Je hebt het gewoon lang niet altijd voor het kiezen welke encoding de data heeft waar je mee moet werken. Dus wanneer je op die data wilt afstemmen dan moet je PHP code dus met UTF-16 data of anderzins ge-encodeerde data uit de voeten kunnen. Het wil natuurlijk niet zeggen dat de PHP code zelf als UTF-16 moet worden opgeslagen.

Wat ik wel steeds merk als terugkerend punt, is dat programmeurs (waaronder ikzelf) met enige regelmaat pas in een laat stadium met het begrip encoding te maken krijgen. Het gaat steeds automagisch goed, Latin1 is default op -UX, Windows, en OSX, en compatible met ASCII. UTF-8 is compatible met ASCII, en er zijn veel misverstanden over Unicode, wat niet eens een encoding is. Dus om goed te begrijpen waarom het goed gaat, is begrip van encoding essentieel. Vooral als je een keertje moet afwijken van de standaard.

Maar als je de meeste literatuur, wordt er weinig tot geen aandacht in besteed. Sterker nog, er zijn heel de nodige sites die een poging doen om het uit te leggen, maar de plank net niet helemaal goed slaan. Dus ik wist heel lang niet waarom PHP 'agnostisch' was ten opzichte van encoding. Maar nu blijkt dus dat PHP helemaal niet agnostisch is, maar volledig afhankelijk van ASCII. Niet dat het erg is, er was alleen niemand die het even kort en bondig kon uitleggen.
 
Eddy E

Eddy E

13/09/2015 13:55:34
Quote Anchor link
Ik moet ook zeggen dat ik er, in de jaren dat ik bezig met met PHP, zeer zelden een probleem heb gehad met encoding.
Hooguit dat een ë niet goed werd weergegeven, maar dan deed ik wel iets als str_replace("&54i9n", "ë", $string);... dat werkte ook.

Later (zeg: 6 maanden geleden) dacht ik van: alles UTF8 (of LATIN1, wat dan ook).
Maar in de meeste websites geef ik dus (nog steeds niet) expliciet aan welke encoding nodig is. Gewoon, omdat het nu ook prima werkt.
 

13/09/2015 22:19:02
Quote Anchor link
Quote:
.. maar dan deed ik wel iets als ..

Misschien begrijp ik het verkeerd? Als je met data werkt, dan moet je toch besef hebben van welke encoding de bits in je bytes representeren als je die bytes gaat bewerken. Hoe vaak kom je 'problemen met diakritische tekens' tegen, gewoon omdat men niet doorheeft wat encoding en transcoding is? Terwijl het in essentie simpel te begrijpen is, en je moet er even op letten, en dan ben je veel ellende voor. Bijvoorbeeld als je data in je database door onkunde keer op keer gemangeld wordt, waarna je geen idee meer hebt van hoe je je data kunt terugkrijgen? In een praktijksituatie heb ik meegemaakt dat iemand door een incompatible codepage te kiezen, met één onwetende druk op de knop 30 jaar werk heefd vernietigd. Men kwam er pas na 6 maanden achter dat de code niet ging werken, waardoor het werk van 60 man (maal een half jaar) overnieuw moest. Nu gun ik niemand zo'n praktijkervaring, maar ik vind de lakse houding over de belangrijkheid van encoding wel wat te wensen over laten:
Quote:
in de meeste websites geef ik dus (nog steeds niet) expliciet aan welke encoding nodig is. Gewoon, omdat het nu ook prima werkt

Kan je vertalen naar: ik doe maar wat en ik geef er niets om totdat het fout is gegaan en er maar hard genoeg over geklaagd gaat worden.
Ik hoop niet dat een programmeur met dergelijke attitude nooit cruciale applicaties hoeft te maken, totdat-ie heeft begrepen dat de werkelijke waarde van data letterlijk van levensbelang kan zijn.
Gewijzigd op 13/09/2015 22:23:01 door
 
Eddy E

Eddy E

14/09/2015 20:22:56
Quote Anchor link
Ik hoop het ook niet.
Ik ben maar hobbist die thuis wat raak kloot en toevallig nog wat resultaat neer zet.
Encoding is iets wat je pas doet als je het nodig hebt en/of fout gaat.
Data opslaan doe je met mysql_-functies (toen nog wel) en welke encoding daarin zat... ach. Het werkte.
Pas als er problemen gaan ontstaan, ga je verder kijken.

Eddy
 

15/09/2015 09:17:17
Quote Anchor link
Off-topic:
Nouja, ergens is er wat voor te zeggen; iedereen heeft een beperkte hoeveelheid tijd tot z'n beschikking, al dan niet professioneel, waarin je iets wilt neerzetten. Encoding is alleen wel heel erg belangrijk, zonder dat je het in eerste instantie doorhebt, het is dan ook niet zo heel vreemd dat PHP6 volledig Unicode moest zijn. Helaas bleek dat zo lastig dat de ontwikkelaars PHP6 maar hebben overgeslagen. Dus zijn we toch weer op onzelf aangewezen.

Waarom je het wel wilt/moet weten:
Wanneer je iets programmeert of zelfs maar typt in een tekstverwerker heb je al onbewust met encoding te maken. Dat gaat goed zolang de encoding hetzelfde blijft. Je krijgt met encoding te maken bijvoorbeeld:
- als je even vlug een site klust en later de vraag naar boven komt om een webwinkel te bouwen en het euro-teken nodig is
- je wilt je site aanvullen met AJAX, en dan blijkt de benodigde encoding (Unicode) niet te passen op de default encoding van je OS cq. PHP (Latin1).
- je wilt maar zelfs iets inlezen van een CSV, tekstbestand met BOM, of zelfs XML schrijven via SimpleXML, XMLWriter of DOMDocument, die laatsten willen allemaal Unicode als input.
- je wilt iets lezen of wegschrijven naar je MySQL-database met een andere encoding

In al deze gevallen krijg je te maken met het overzetten van de ene encoding naar de andere, oftewel transcoding. Als je je daar niet bewust van bent, gaan de dingen zeker verkeerd (data wordt verkeerd geinterpreteerd of erger - karakters die niet naar de doelencoding worden gemapped raken domweg kwijt), en dat is jammer omdat het vooraf relatief simpel voorkomen had kunnen worden. Dan hoef je niet achteraf nog eens in alle voorkomende gevallen met str_replace() de diakritische tekens te vervangen voor HTML-entities, dat kost extra en dus onnodige resources, niet alleen van de CPU maar ook van je eigen ontwikkeltijd. Jij en je klant zijn uiteindelijk beter af als je van te voren aandacht hebt voor encoding.

Quote:
Later (zeg: 6 maanden geleden) dacht ik van: alles UTF8 (of LATIN1, wat dan ook).

Het beste kan je Unicode gebruiken gebruiken voor je website of -applicatie, UTF-8 is de default van HTML5.

Korte checklist:
- je kunt je PHP files opslaan in UTF-8 omdat UTF-8 ASCII-compatible is zonder BOM of Byte Order Mark. Een BOM is niet van toepassing op UTF-8 en het zorgt dat er te snel HTTP headers worden verstuurd, dus dat willen we niet.
- je geeft encoding aan via HTTP-headers
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
header('Content-Type: text/html; charset="UTF-8"');

- je checkt de input die de browser naar PHP stuurt of de strings wel UTF-8 compliant zijn (*)
Bijvoorbeeld met een soort van is_utf8() -functie van een library als Portable UTF-8
- je gebruikt utf8mb4 als encoding voor tabellen en kolommen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

- je stelt de verbinding met de database via mysqli of PDO in als UTF-8 (om automatische transcoding via de driver te voorkomen)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
$db = new mysqli(...);
$db->set_charset('utf8mb4');
$db->query('SET NAMES "utf8mb4" COLLATE "utf8mb4_unicode_ci";');

- je moet een lettertype gebruiken dat de Unicode karakters ondersteunt die je wilt zien

Bij het programmeren in PHP moet je vervolgens op twee dingen blijven letten:
1.) De oudere, SBCS-functies (Single Byte Character Support) zoals strlen() en alle andere werken op byte-niveau, ze zijn niet geschikt voor UTF-8. Je moet dan de MBCS-functies (Multi Byte Character Support) gebruiken zoals mb_strlen(). PHP biedt niet voor alle SBCS-functies een MBCS-variant. Via het internet zijn libraries te vinden die PHP aanvullen.

2.) De nodige MBCS-functies van PHP werken alleen met de eerste Unicode plane en niet met de overige planes, de MBCS-functies zijn dus niet volledig Unicode compliant. Dat bemoeilijkt bijvoorbeeld gebruik van emoji en vele andere Unicode karakters. Gelukkig hebben we de meeste van die karakters niet nodig, en zijn er omwegen met notatie in andere vormen die weer ASCII-compliant zijn, en extra ruimte nodig hebben.
Hopelijk biedt PHP7 volledige ondersteuning voor Unicode, maar ik vermoed van niet anders hadden ze dat wel groots aangekondigd.

(*) Dit punt is waar het mij om te doen is bij het controleren van de $_SERVER['REQUEST_METHOD'] die door de browser wordt ingesteld. Gelukkig blijkt de tekst 'POST' altijd hetzelfde te zijn in zowel ASCII als Latin1 als Unicode.
Gewijzigd op 16/09/2015 09:50:02 door
 
Eddy E

Eddy E

15/09/2015 21:57:36
Quote Anchor link
Kan je van die korte checklist per kopje de uitwerking in PHP gegeven?
En wellicht als tutorial? Je weet er genoeg van (of doet dat zo lijken): dan blijft het namelijk ook voor het nageslacth gebundeld bestaan ;)
 
Thomas van den Heuvel

Thomas van den Heuvel

15/09/2015 22:15:02
Quote Anchor link
Quote:
Wat ik wel steeds merk als terugkerend punt, is dat programmeurs (waaronder ikzelf) met enige regelmaat pas in een laat stadium met het begrip encoding te maken krijgen

Als je met data (uit databases of andere (externe) bronnen) werkt loop je hier toch vrij snel tegenaan.

Het "probleem" van PHP is dat het een lage instapdrempel heeft. Hobbyisten beginnen met "programmeren" voordat ze de basisbeginselen van HTML/CSS/JavaScript onder de knie hebben (laat staan dat ze een elementair begrip hebben van hoe HTTP werkt).

De truuk is ook om het simpel te houden. Een heleboel techno blabla en mensen haken af.

Een redelijk toegankelijk artikel is nog steeds: The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!).

En inderdaad, maak een tutorial oid, dit is best nuttige informatie allemaal, maar hier is niet de plaats om al dit soort kennis (hoe nuttig ook) te etaleren. Because off topic.
 

16/09/2015 09:20:58
Quote Anchor link
Er zijn tutorials genoeg, en zoals Thomas' artikel aangeeft zijn er geen excuses voor wie het niet weet. Maar voor de volledigheid heb ik m'n vorige post aangevuld met de info waar Eddy om vroeg.

En ik weet er inderdaad het nodige van omdat ik een paar jaar geleden ook op het punt kwam dat mijn zelfgeschreven programma bugs had met data en diakritische tekens.
Dit probeerde ik eerst ook op Eddy's manier op te lossen, maar wat ik aan de ene kant oploste ging aan de andere kant weer fout; en dat allemaal omdat ik niet volledig bewust was van encoding. Met als gevolg dat ik het na liet om op alle punten transcoding te doen.

Het heeft me dagen gekost om de bugs en de corrupt geraakte data in de database te herstellen. Na het instellen van Unicode als UTF-8 op de database, database driver, PHP, HTML (en CSS...) waren alle problemen als sneeuw voor de zon verdwenen.
Het herstellen van vertrouwen van gebruikers in het programma duurde ietsje langer, want voor de gebruikers is de data veel belangrijker dan het programma. Gelukkig is ook dat weer goedgekomen.
Gewijzigd op 16/09/2015 09:44:29 door
 



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.