У меня есть строка с "\ u00a0", и мне нужно заменить ее на "" str_replace не удается - PullRequest
19 голосов
/ 07 апреля 2010

Мне нужно очистить строку, которая приходит (копируется / вставляется) из различных приложений пакета Microsoft Office ( Excel , Доступ и 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.

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

____ EDIT ____

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

Ответы [ 7 ]

46 голосов
/ 10 июля 2013

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

$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
5 голосов
/ 07 апреля 2010

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

4 голосов
/ 20 ноября 2012

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

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

str_replace(chr(160),' ');

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

3 голосов
/ 13 ноября 2012

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

Так что было бы правильнее заменить его на ""

1 голос
/ 18 декабря 2014

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

$str = trim($str, chr(0xC2).chr(0xA0));
1 голос
/ 07 апреля 2010

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

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

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

str_replace("\\u00a0", "",$string);
0 голосов
/ 27 апреля 2016

Это помогло мне:

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