Стандартные функция trim( string $str [, string $character_mask = " \t\n\r\0\x0B" ])
удаляет все возможные пробелы в начале или в конце строки, так же эта функция может удалять те символы, которые вам не нужны, например точку или запятую:
$str = trim($str, ",");
или
$str = trim($str, ".");
Так же есть 2 функции, ltrim
и rtrim
, которые работают так же как и trim
, за исключением того , что ltrim
удаляет символы в начале строки, а rtrim
в конце.
Иногда нужно удалить лишние пробелы, а иногда и табы, в самом тексте, например:
«Купив телефон сегодня вы получите самый лучший подарок».
В этом тексте после каждого слова стоит более 1 пробела, Попробуем заменить лишние через регулярное выражение:
$str = preg_replace('/\s+/', ' ', $str);
В данном случае \s говорит что надо заменить все пробелы, а +
включая табы на 1 пробел. Если вы считаете, что регулярные выражения зло, то можно использовать:
$str = str_replace(" ", " ", $str);
while( strpos($str," ")!==false){
$str = str_replace(" ", " ", $str);
}
Возможно вы столкнулись с такой проблемой, что ни одно из средств перечисленных выше не удаляет пробелы. Для начала рассмотрите внимательно текст, желательно в исходном коде, потому что текст «Купив телефон сегодня вы получите самый лучший подарок» может оказаться таким:
«` `Купив ` `телефон` `сегодня вы` `получите самый лучший подарок».
Для начала надо заменить  
и
просто на пробелы:
$str = str_replace('&', '&', $str);
$str = str_replace(' ', ' ', $str);
А потом, применить один из способов выше.
Хорошо, это мы сделали, но у нас остались лишние пробелы, которые не удаляются стандартными методами. Вероятнее всего это NO-BREAK SPACE, в таблице utf-8 символов он идет как c2a0
.
Для начала попробуйте перевести ваш текст в HEX:
echo bin2hex($str);
echo substr_count($str, "\xc2\xa0");
и поищите там: c2a0
.
Удаление через регулярное выражение:
echo preg_replace('!\s++!u', ' ', $str);
Удаление без регулярного выражения:
$text = hex2bin(str_replace('c2a0', '20', bin2hex($str)));
while( strpos($text,' ')!==false){
$text = str_replace(" ", " ", $text);
}
$text = trim($text);
Переводим наш текс в HEX, заменяем NO-BREAK SPACE на обычный пробел, переводим обратно в обычный текст, после этого можно сделать замену пробелов и чистку.