我需要清理来自各种Microsoft Office套件应用程序(Excel,Access和Word)的字符串(复制/粘贴),每个应用程序都有自己的一组编码
我正在使用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的输出,而不是实际的字符串!
答案 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);