Accept HTML in custom function

Trying to store markup in the database is generally a bad idea– some reasons being:

  1. Certain characters need to be escaped to be put in the database
  2. Having markup in the database will negatively effect any searches
    you may need to run on the data, now or in the future.
  3. Having markup in the database will complicate attempts to reuse the
    data in different contexts, now or in the future.

Just store the raw data in the database and format it on output. The basic code would look like:

$meta = get_post_meta($post->ID, 'post_subtitle', true);
if (!empty($meta)) {
  $mstr="<span class="some-class"".$meta.'</span>';
}

You can automate that by creating a shortcode or by inserting it using the the_content filter, for example.