strip_tags
can't do this.
Take a look at HTML Purifier. It's designed exactly for this use case. You can give it a whitelist of tags and attributes to allow. It also has basic CSS parsing, allowing you to whitelist and blacklist CSS properties.
In this case, you'd probably do something like:
// This has not been tested, but should work
$configuration->set('HTML.Allowed', 'br,quote,code,pre,ul,li,ol,span[style]');
$configuration->set('CSS.AllowedProperties', 'font-weight');
Now, you're still going to be left with some extra span tags. You've suggested that you simply want them gone. This is going to be a bit stickier. You want to use a DOM manipulation tool to find each useless span, capture the contents, remove the span, then insert the contents where the span was. phpQuery was already pointed out, and Simple HTML DOM should also do the trick. PHP's own DOM extension can also do this, but it's going to be much more of a bear.