Заменить &nbsp на обычные пробелы в PHP

 В избранное 
Материал из Интервики
Перейти к: навигация, поиск

Заменить   на обычные пробелы в PHP

Иногда, обрабатывая текст средствами PHP, сталкиваешься с тем, что вместо обычных пробелов используется код " ". При попытке заменить его на пробел с помощью функций типа str_replace ничего не получается.

Происходит это потому, что в самом тексте нет этих кодов " ", в тексте имеется коды неразрывного межсловного пробела U+00A0, который при отображении текста показывается как " ".

Виды пробелов в Юникоде бывают разные:

  • Межсловный пробел, U+0020,  
  • Неразрывный межсловный пробел, U+00A0,  
  • Круглая шпация, U+2003,  
  • Полукруглая шпация, U+2002,   Также называется En Space.
  • Третная шпация, U+2004,   По-английски называется Three-per-Em Space.
  • Четвертная шпация, U+2005,   По-английски называется Four-per-Em Space.
  • Одна шестая круглой, U+2006,   По-английски называется Six-per-Em Space.
  • Тонкая шпация, U+2009,   По-английски называется Thin Space.
  • Волосяная шпация, U+200A,  

Для преобразования знаков пробелов в коды, можно использовать функцию htmlentities():

$text = htmlentities($text);

$text = str_replace(" ",' ',text);

Обратная htmlentities функция:

string html_entity_decode ( string string [, int quote_style [, string charset]] )