You could obtain what you need like this:
function str_replace_special_caracter($content) {
// My array of special caracters to get <sup>
$specialCaracters = array('®', '™');
foreach( $specialCaracters as $character ){
$content = preg_replace( '@(' . preg_quote( $character, '@' ) . ')@i', "<sup>\\1</sup>", $content );
}
// Return
return $content;
}
add_filter( 'the_content', 'str_replace_special_caracter', 99 );