Краткий ответ - не кодируйте их. :-)
- это именованная сущность HTML для символа Unicode NO-BREAK SPACE
или U+00A0
. Так что это не SPACE
(U + 0020). У вас есть код, который явно добавляет их и / или кодирует их в HTML-объекты. Лучшим вариантом будет найти эту логику в исходном коде и изменить ее. Ищите что-то, что добавляет
или звонки типа htmlentites()
.
Ваш тип контента странный (я бы ожидал text/plain
). Из вашего описания кажется, что браузер отображает ваш ответ как HTML. Он декодирует объекты и отображает содержимое, разделенное пробелами без перерывов. Если вы просматриваете фактический источник ответа в инструментах разработчика вашего браузера, он должен включать объекты. По сути, происходит то же самое, что и рендеринг HTML-тегов.
Возможно заменить объекты. Простой способ - заменить строку:
$out = str_replace(' ', ' ', $in);
Регулярное выражение позволит заменить группы объектов:
$out = preg_replace('(( )+)', ' ', $in);
Однако, если кодирование было выполнено с использованием htmlentities()
, оно могло бы иметьзакодированы и другие символы. html_entity_decode()
обеспечивает декодирование для именованных сущностей HTML, но результатом будут пробелы без перерывов. Возможно, вам придется объединить его с str_replace()
:
$in = 'hello world ähm';
$out = str_replace(
"\u{00A0}", " ", html_entity_decode($in, ENT_COMPAT | ENT_HTML401, 'utf-8')
);
var_dump($out);
Вывод:
string(16) "hello world ähm"