chr(10) is end of line, so you should add modifier D.
If this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines).
// v
echo preg_match("/^[\x20-\x7E]*$/D", chr(10)) ? 'passed' : 'failed';
// ^