I need to clean a string that comes (copy/pasted) from various Microsoft Office suite applications (Excel, Access, and Word), each with its own set of encoding.
I'm using json_encode for debugging purposes in order to being able to see every single encoded character.
I'm able to clean everything I found so far (\r \n) with str_replace, but with \u00a0 I have no luck.
$string = '\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;'; //this is the output from json_encode $clean = str_replace("\u00a0", "",$string); returns:
\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0; That is exactly the same; it completely ignores \u00a0.
Is there a way around this? Also, I'm feeling I'm reinventing the wheel, is there a function/class that completely strips EVERY possibile char of EVERY possible encoding?
____EDIT____
After the first two replies I need to clarify that my example DOES work, because it's the output from json_encode, not the actual string!
9 Answers
By combining ord() with substr() on my string containing \u00a0, I found the following curse to work:
$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text ); 2Try this:
$str = str_replace("\u{00a0}", ' ', $str); 3Works for me, when I copy/paste your code. Try replacing the double quotes in your str_replace() with single quotes, or escaping the backslash ("\\u00a0").
I just had the same problem. Apparently PHP's json_encode will return null for any string with a 'non-breaking space' in it.
The Solution is to replace this with a regular space:
str_replace(chr(160),' '); I hope this helps somebody - it took me an hour to figure out.
This one also works, i found somewhere
$str = trim($str, chr(0xC2).chr(0xA0)); 2A minor point: \u00a0 is actually a non-breaking space character, c.f.
So it might be more correct to replace it with " "
This did the trick for me:
$str = preg_replace( "~\x{00a0}~siu", " ", $str ); You have to do this with single quotes like this:
str_replace('\u00a0', "",$string); Or, if you like to use double quotes, you have to escape the backslash - which would look like this:
str_replace("\\u00a0", "",$string); 1You can use json_encode($string, JSON_UNESCAPED_UNICODE |JSON_PRETTY_PRINT);