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