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

时间:2010-04-07 12:49:09

标签: php encoding str-replace

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

我正在使用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);

返回:

mail@mail.com\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;mail@mail.com

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

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

____ EDIT ____

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

8 个答案:

答案 0 :(得分:46)

ord()substr()合并在包含\ u00a0的字符串上,我发现以下诅咒可以使用:

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

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

解决方案是用常规空间替换它:

str_replace(chr(160),' ');

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

答案 3 :(得分:2)

一个小问题:\ u00a0实际上是一个不间断的空格字符,c.f。 http://www.fileformat.info/info/unicode/char/a0/index.htm

因此用“”替换它可能更正确

答案 4 :(得分:1)

您必须使用以下单引号执行此操作:

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

或者,如果你想使用双引号,你必须逃避反斜杠 - 这看起来像这样:

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

答案 5 :(得分:1)

这个也行,我找到了某个地方

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

答案 6 :(得分:0)

这对我有用:

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

答案 7 :(得分:0)

尝试一下:

$str = str_replace("\u{00a0}", ' ', $str);