hi,
ich bin gerade dabei unsere site auf UTF-8 umzustellen. d.h. dass ich seiten direkt in UTF-8 an den browser schicke (und mich auch darauf verlassen möchte dass UTF-8 zurückkommt - z.b. bei einer formulareingabe)
1. frage:
erfahrungsgemäss: sollte ich jedes feld einzeln auf UTF-8 validität prüfen (also alle textfelder), oder reichts wenn ich überprüfe ob das formular in UTF-8 gePOSTet wurde (z.b. über eine spezielle zeichensequenz als hidden-field)?
momentan verstecke ich folgendes feld in meinem formular:
<input type="hidden" name="charset_check" value="ä™®‰">
und untersuche es danach mit folgender regex:
// check if the posted data is UTF-8 conform
$regex = '/^(
[\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
)*$/x';
... das liefert zufriedenstellende ergebnisse. auch mb_detect_ecoding() scheint gut zu funktionieren, allerdings ist mir die sache mit der mb_detect_order ein bissl suspekt, dass erscheint öfter ein wenig 'buggy'.
2. frage:
wie kann ich die formularfelder inhaltlich validieren? z.b. einen personennamen (auf (un-)gültige zeichen, länge)? ich verwende derzeit z.b. folgende regex:
$word_pattern = '/^([\w ]+)$/u';
echo 'text field: word character check '.$word_pattern.' :<br>';
if (preg_match( $word_pattern , $_REQUEST['textfield']))
echo "IS valid word";
else
echo "NOT valid word";
allerdings: sobald ich einen umlaut in das textfield eingebe funktioniert die regex nicht, z.b.:
asdfasd: IS valid word
asdföasdf: NOT valid word
woran kann das liegen? NB: ich versende das formular in UTF-8 (deswegen auch der /u pattern-modifier)
wäre um tipps/hilfe äusserst dankbar.
lg bernhard