My goodness, there's a lot of stuff wrong with your posting..
First: - is not considered a control character. It appears in UTF-8, latin1 and even ASCII.
If there are indeed bytes in your string that are not valid UTF-8, then you must be dealing with some other encoding. It is the most likely that this is latin1, in which case you could use utf8_encode to convert the string.
Don't blindly do this though, first figure out where your data comes from and if it's really latin1. Sometimes utf8_encode is kind of applied as a band-aid for anything behaves weird, but that's not a good way to deal with things. As a rule, it might help to think about it this way:
- Within your application, ensure that every string is always passed around as UTF-8.
- If you're receiving data from external sources, figure out what character set they use, and convert if needed.
I have no idea how this relates to the code snippet you posted though.