bepe: UTF-8 Formularfeld validierung

Beitrag lesen

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