我有一个带有"\ u00a0"的字符串,我需要将其替换为""str_replace失败

0pl*_*us1 20 php encoding str-replace

我需要清理来自各种Microsoft Office套件应用程序(Excel,AccessWord)的字符串(复制/粘贴),每个应用程序都有自己的编码集.

我正在使用json_encode进行调试,以便能够看到每个编码的字符.

我能用str_replace清理到目前为止我发现的所有内容(\ r \n),但是用\ u00a0我没有运气.

$string = 'mail@mail.com\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;mail@mail.com'; //this is the output from json_encode

$clean = str_replace("\u00a0", "",$string);
Run Code Online (Sandbox Code Playgroud)

收益:

mail@mail.com\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;mail@mail.com
Run Code Online (Sandbox Code Playgroud)

那是完全一样的; 它完全忽略了\ u00a0.

有没有解决的办法?此外,我觉得我正在重新发明轮子,是否有一个功能/类完全剥离每个可能编码的可能的字符?

____编辑____

在前两个回复后,我需要澄清我的示例是否有效,因为它是json_encode的输出,而不是实际的字符串!

小智 47

通过ord()substr()我的包含\ u00a0的字符串组合,我找到了以下诅咒:

$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
Run Code Online (Sandbox Code Playgroud)


Ann*_*rom 6

当我复制/粘贴你的代码时,对我有用.尝试用str_replace()单引号替换双引号,或者转义反斜杠("\\u00a0").


Jer*_*cob 5

我只是遇到了同样的问题。显然,对于任何包含“不间断空格”的字符串,PHP 的 json_encode 将返回 null。

解决方案是将其替换为常规空间:

str_replace(chr(160),' ');
Run Code Online (Sandbox Code Playgroud)

我希望这对某人有所帮助 - 我花了一个小时才弄明白。


小智 5

尝试这个:

$str = str_replace("\u{00a0}", ' ', $str);
Run Code Online (Sandbox Code Playgroud)