У меня есть строка с "\ u00a0", и мне нужно заменить ее на "" str_replace не удается

Мне нужно очистить строку, которая приходит (копировать / вставлять) из различных приложений Microsoft Office Suite ( Excel , Access и Word ), каждая из которых имеет свой собственный набор кодировок.

Я использую json_encode для целей отладки, чтобы иметь возможность видеть каждый отдельный кодированный символ.

Я могу очистить все, что я нашел до сих пор (\ r \ n), с str_replace, но с \ 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, а не фактическая строка!

Работает для меня, когда я копирую / вставляю код. Попробуйте заменить двойные кавычки на str_replace() одиночными кавычками или избежать обратной косой черты ( "\\u00a0" ).

Объединив ord() с substr() в моей строке, содержащей \ u00a0, я нашел следующее проклятие для работы:

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

У меня была такая же проблема. Очевидно, что json_encode PHP возвращает null для любой строки с «неразрывным пространством» в ней.

Решение состоит в том, чтобы заменить это на регулярное пространство:

 str_replace(chr(160),' '); 

Надеюсь, это помогает кому-то – мне понадобился час, чтобы понять.

Небольшая точка: \ u00a0 на самом деле является неразрывным символом пробела, cf http://www.fileformat.info/info/unicode/char/a0/index.htm

Поэтому было бы правильнее заменить его на ""

Вы должны сделать это с одинарными кавычками:

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

Или, если вам нравится использовать двойные кавычки, вам нужно избежать обратной косой черты – это будет выглядеть так:

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

Этот тоже работает, я нашел где-то

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

Это сделало трюк для меня:

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