26

我需要清理来自各种 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

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

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

____编辑____

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

4

8 回答 8

54

通过结合ord()substr()的包含 \u00a0 的字符串,我发现以下诅咒起作用:

$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
于 2013-07-10T08:15:03.390 回答
6

尝试这个:

$str = str_replace("\u{00a0}", ' ', $str);
于 2019-12-27T20:30:19.313 回答
5

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

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

str_replace(chr(160),' ');

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

于 2012-11-20T08:57:50.220 回答
5

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

于 2010-04-07T12:55:04.000 回答
4

这个也有用,我在某个地方找到的

$str = trim($str, chr(0xC2).chr(0xA0));
于 2014-12-18T11:59:51.207 回答
3

一个小点: \u00a0 实际上是一个不间断的空格字符,参见http://www.fileformat.info/info/unicode/char/a0/index.htm

所以用“”代替它可能更正确

于 2012-11-12T20:31:24.073 回答
1

这对我有用:

$str = preg_replace( "~\x{00a0}~siu", " ", $str );
于 2016-04-26T22:24:18.070 回答
0

你必须用这样的单引号来做到这一点:

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

或者,如果您喜欢使用双引号,则必须转义反斜杠 - 如下所示:

str_replace("\\u00a0", "",$string);
于 2010-04-07T12:57:52.113 回答