Ответ 1
Работает для меня, когда я копирую/вставляю код. Попробуйте заменить двойные кавычки в str_replace()
на одинарные кавычки или избежать обратной косой черты ("\\u00a0"
).
Мне нужно очистить строку, которая приходит (копировать/вставлять) из различных приложений 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, а не фактическая строка!
Работает для меня, когда я копирую/вставляю код. Попробуйте заменить двойные кавычки в str_replace()
на одинарные кавычки или избежать обратной косой черты ("\\u00a0"
).
Объединив ord()
с substr()
в моей строке, содержащей \u00a0, я нашел следующее проклятие для работы:
$text = str_replace( chr( 194 ) . chr( 160 ), ' ', $text );
У меня была такая же проблема. Очевидно, PHP json_encode вернет null для любой строки с "неразрывным пространством" в ней.
Решение состоит в замене этого на регулярное пространство:
str_replace(chr(160),' ');
Надеюсь, это помогает кому-то - мне понадобился час, чтобы понять.
Вы должны сделать это с помощью одиночных кавычек, подобных этому:
str_replace('\u00a0', "",$string);
Или, если вам нравится использовать двойные кавычки, вам нужно убрать обратную косую черту - это будет выглядеть так:
str_replace("\\u00a0", "",$string);
Маленькая точка:\u00a0 на самом деле является неразрывным пробелом, c.f. http://www.fileformat.info/info/unicode/char/a0/index.htm
Так что было бы правильнее заменить его на ""
Этот тоже работает, я нашел где-то
$str = trim($str, chr(0xC2).chr(0xA0));
Это сделало трюк для меня:
$str = preg_replace( "~\x{00a0}~siu", " ", $str );