2010-04-07 111 views
12

我需要清理来自各种Microsoft Office套件应用程序(复制/粘贴)的字符串(ExcelAccessWord ),每个都有自己的一组编码。我有一个字符串“ u00a0”,我需要用它替换它“”str_replace failed

我使用json_encode进行调试,以便能够看到每一个编码字符。

我可以使用str_replace清理目前为止发现的所有内容(\ r \ n),但使用\ u00a0我没有运气。

$string = '[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]'; //this is the output from json_encode 

$clean = str_replace("\u00a0", "",$string); 

回报:

[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected] 

这是完全一样的;它完全忽略了\ u00a0。

有没有办法解决这个问题?另外,我感觉我正在重新发明轮子,是否有一个函数/类可以完全去除每种可能编码的每个可能的字符?

____EDIT____

前两个答复,我需要澄清的是我的例子不工作后,因为它是从json_encode的输出,而不是实际的字符串!

回答

6

适用于我,当我复制/粘贴您的代码。尝试用单引号替换str_replace()中的双引号,或者转义反斜杠("\\u00a0")。

+0

在你的例子中,它的工作原理是因为你使用js的输出on_encode不是实际的字符串!如果我复制粘贴我的代码,即使对我来说也是完美的。 – 0plus1 2010-04-07 13:01:01

+0

如果您替换'\ xa0'而不是'\ u00a0',会发生什么? – 2010-04-07 13:23:13

+0

发生这种情况。它确实删除了\ u00a0的实例,当从json_encode打印时它看起来没问题,但是如果我在没有json编码的情况下回显字符串,我会得到一个 ,之前有\ u00a0。在这一点上,我不明白发生了什么事。请给我一个解释! :-) – 0plus1 2010-04-07 14:48:39

1

你有单引号这样做:

str_replace('\u00a0', "",$string); 

或者,如果你喜欢用双引号,你必须转义反斜线 - 这应该是这样的:

str_replace("\\u00a0", "",$string); 
+0

仍然不会工作 – 0plus1 2010-04-07 12:59:58

+0

我遇到了这个问题。这是为我工作的解决方案。我用已知的\ u00a0字符将一个字符串复制到我的编辑器中,然后复制\ u00a0表示的'空格'并将其粘贴到str_replace函数中。最后它看起来像这样:str_replace(“”,“”,$ string)。第一个参数中的空格是非标准的\ u00a0。现在通过json_encode运行它。 – 2012-02-20 16:36:31

4

我有同样的问题。显然,PHP的json_encode将为任何带有“不间断空格”的字符串返回null。

解决方案是用常规的空间来取代这个:

str_replace(chr(160),' '); 

我希望这可以帮助别人 - 我花了一个小时才搞清楚。

37

通过与substr()含\ u00a0我的字符串相结合ord(),我发现下面的诅咒工作:

$text = str_replace(chr(194) . chr(160), ' ', $text); 
+0

谢谢,这个为我工作。 – user11153 2013-08-19 18:16:17

+0

谢谢!为我节省了很多时间。 '“\ xc2 \ xa0”也适用。 – elipoultorak 2015-08-31 11:32:31

+0

yep为我工作。我试图从一个有法文文本的网站上删除数据。 – 2016-04-13 16:02:02

0

这其中也适用,我发现某处

$str = trim($str, chr(0xC2).chr(0xA0)); 
0

这并获得成功对我来说:

$str = preg_replace("~\x{00a0}~siu", " ", $str); 
相关问题