我需要清理来自各种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
那是完全一样的。它完全忽略\ u00a0。
有没有解决的办法?另外,我感觉到我正在重新发明轮子,是否有一个函数/类完全剥离了每种可能编码的所有可能字符?
_编辑_
在前两次回复之后,我需要澄清一下我的示例确实可行,因为它是json_encode的输出,而不是实际的字符串!
通过ord()与substr()包含\ u00a0的字符串结合使用,我发现以下诅咒起作用了:
ord()
substr()
$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
当我复制/粘贴您的代码时,对我有用。尝试将单引号中的双引号替换为str_replace()单引号,或转义反斜杠("\\u00a0")。
str_replace()
("\\u00a0")