Add a /u
modifier:
$string = 'Você está bem? 123 # ! @ ...';
echo preg_replace('/[^\w\s+$]/u', '_', $string);
^
See this IDEONE demo
More about the /u
modifier in SO regex documentation:
Pattern and subject strings are treated as UTF-8.