PHP knows nothing about character set. You can control output to the browser, but in PHP code it's not needed.
Maybe you store wrong character in your source string?
I test your reg and it works fine:
$string = 'abcABC012'.chr(0xa4).'$';
$res = ereg( "[^-a-zA-Z0-9.:,!+\\xA3$\\xA4]", $string);
echo 0+$res;
Note that in patter appears ONE slash instead of two - it will be converted by PHP right in pattern before it will be passed to ereg as argument.