When I try to parse some html that has sprinkled through it and then echo it, the \"turns into\" this character:
html_entity_decode(" ") == '\xa0'
I think by design, I don't understand why str_replace does not work for you, try this snippet:
$nbsp = html_entity_decode(" ");
$s = html_entity_decode("[ ]");
$s = str_replace($nbsp, " ", $s);
echo $s;
perhaps \xa0 it's not a valid unicode string, so using the result of the html_entity_decode() may be more appropriate for text replacement instead of \xa0.
BalusC explanation looks plausible you may trying to insert utf-8 \xc2\xa0 in the the then trying to display it as latin instead of utf8, if you want to use unicode stuff you should keep utf-8 encoding everywhere, from the charset of the server to the db, since you will have the same problem when using e.g. à