Overige in- en uitvoer
Browserinvoer
Dit onderdeel gaat eigenlijk automatisch, omdat transcoding automatisch geregeld wordt. Is je HTML-pagina in UTF-8, dan zal de browser de gegevens in UTF-8 aanleveren. Een ander voorbeeld: als iemand op een Mac werkt en uit Office 2011 kopieert met de "Latin1"-encoding, dan transcodeert het automatisch naar Unicode bij het plakken. Omgekeerd werkt het ook, met bijvoorbeeld een copy paste vanuit de browser naar een tekstverwerker.
Is de data eenmaal opgestuurd en aangekomen bij PHP in een globale variabele als $_GET, $_POST of $_REQUEST, dan moet er slechts één ding gebeuren. Alle informatie opgestuurd vanuit de browser moet als tainted (aangetast) worden beschouwd, en voordat we er iets mee doen moet de data gevalideerd worden. Immers, niet elk groepje van bytes levert een valide codepoint op, er kan bewust mee geknoeid zijn. Een groepje bytes kan bewust
extra lang worden gemaakt met veel meer dan 6 bytes, om te hacken, of bugs te vinden, of meer algemeen om de applicatie om zeep te helpen.
Een goede manier om de validiteit te controleren is met de reguliere expressie die door het W3C wordt aanbevolen:
2
3
4
5
6
7
8
9
10
11
12
13
14
function is_utf8($sData){
return preg_match('%^(?:
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*$%xs', $sData);
}
?>
Browseruitvoer
De browser moet weten dat wat het ontvangt UTF-8 is, dat doen we door eenduidig de encoding te vermelden met de HTTP-header 'Content-Type: text/html; charset=utf-8'. Vervolgens moet de programmeur er voor zorgen dat de output daadwerkelijk UTF-8 is. Dat klinkt eenvoudiger dan het is, getuige het volgende hoofdstuk.
Inhoudsopgave
- Inleiding
- Over Unicode
- PHP en UTF-8
- Tekstbestanden
- Databases
- Overige in- en uitvoer
- Verwerking in PHP
- Conclusie