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

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

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

Я могу очистить все, что я нашел до сих пор (\ r\n), с str_replace, но с \u00a0 мне не повезло.

$string = '[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]'; //this is the output from json_encode

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

возвращает:

[email protected]\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0;[email protected]

Это точно то же самое; он полностью игнорирует \u00a0.

Есть ли способ обойти это? Кроме того, я чувствую, что я изобретаю колесо, есть ли функция/класс, который полностью блокирует КАЖДОЕ возможное char КАЖДОЙ возможной кодировки?

____ EDIT ____

После первых двух ответов мне нужно уточнить, что мой пример работает, потому что это вывод из json_encode, а не фактическая строка!

Ответ 1

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

Ответ 2

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

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

Ответ 3

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

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

str_replace(chr(160),' ');

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

Ответ 4

Вы должны сделать это с помощью одиночных кавычек, подобных этому:

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

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

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

Ответ 6

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

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

Ответ 7

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

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