Php убрать множественные пробелы

trim

Optionally, the stripped characters can also be specified using the characters parameter. Simply list all characters that you want to be stripped. With .. you can specify a range of characters.

Return Values

Examples

Example #1 Usage example of trim()

$text = «\t\tThese are a few words 🙂 . » ;
$binary = «\x09Example string\x0A» ;
$hello = «Hello World» ;
var_dump ( $text , $binary , $hello );

$trimmed = trim ( $text );
var_dump ( $trimmed );

$trimmed = trim ( $text , » \t.» );
var_dump ( $trimmed );

$trimmed = trim ( $hello , «Hdle» );
var_dump ( $trimmed );

$trimmed = trim ( $hello , ‘HdWr’ );
var_dump ( $trimmed );

// trim the ASCII control characters at the beginning and end of $binary
// (from 0 to 31 inclusive)
$clean = trim ( $binary , «\x00..\x1F» );
var_dump ( $clean );

The above example will output:

string(32) " These are a few words :) . " string(16) " Example string " string(11) "Hello World" string(28) "These are a few words :) . " string(24) "These are a few words :)" string(5) "o Wor" string(9) "ello Worl" string(14) "Example string"

Example #2 Trimming array values with trim()

$fruit = array( ‘apple’ , ‘banana ‘ , ‘ cranberry ‘ );
var_dump ( $fruit );

array_walk ( $fruit , ‘trim_value’ );
var_dump ( $fruit );

The above example will output:

array(3) < [0]=>string(5) "apple" [1]=> string(7) "banana " [2]=> string(11) " cranberry " > array(3) < [0]=>string(5) "apple" [1]=> string(6) "banana" [2]=> string(9) "cranberry" >

Notes

Note: Possible gotcha: removing middle characters

Because trim() trims characters from the beginning and end of a string , it may be confusing when characters are (or are not) removed from the middle. trim(‘abc’, ‘bad’) removes both ‘a’ and ‘b’ because it trims ‘a’ thus moving ‘b’ to the beginning to also be trimmed. So, this is why it «works» whereas trim(‘abc’, ‘b’) seemingly does not.

See Also

  • ltrim() — Strip whitespace (or other characters) from the beginning of a string
  • rtrim() — Strip whitespace (or other characters) from the end of a string
  • str_replace() — Replace all occurrences of the search string with the replacement string

User Contributed Notes 2 notes

note there is a behaviour change in php 8

You used to be able to say:
$p1 = trim($_POST[‘p1’]);
This will now throw deprecated warnings if parameter p1 is not set. It is better to say:
$p1 = trim($_POST[‘p1’]??»);
or
$p1 = isset($_POST[‘p1’]) ? trim($_POST[‘p1’]) : null;
or
$p1 = isset($_POST[‘p1’]) ? trim($_POST[‘p1’]) : »;

Note that trim() is not aware of Unicode points that represent whitespace (e.g., in the General Punctuation block), except, of course, for the ones mentioned in this page.

There is no Unicode-specific trim function in PHP at the time of writing (July 2023), but you can try some examples of trims using multibyte strings posted on the comments for the mbstring extension: https://www.php.net/manual/en/ref.mbstring.php

Источник

Как удалить повторяющиеся пробелы в тексте?

Допустим имеется текст, в котором между словами есть двойные, тройные и более пробелы. Задача убрать лишние пробелы, оставив только по 1 пробела.

Я написал такой код, но почему то не работает:

$text1 = "Длинный объемный текст с лишние пробелами"; $arr = explode(" ", $text1); for($i=0;$icount($arr);$i++) { $text2 = $text2." ".trim($arr[$i]); } $text2 = trim(text2);

если через echo выводить на экран текст, то выводится нормально, без лишних пробелов, но когда этот текст добавляю в базу, там они опять с лишними пробелами без изменений. как решить проблему?

Как удалить все пробелы в строке, и если есть кавычки, то между ними пробелы заменить на %
Как удалить все пробелы в строке, и если есть кавычки, то между ними пробелы заменить на %? Вот.

Как удалить повторяющиеся символы в строке?
Есть необычная задача. Переменная с набором символов, как вырезать все повторяющиеся символы.

Как удалить повторяющиеся элементы двух массивов?
Имеется три массива $m_1, $m_2 и $m_3. Первый массив содержит буквенно-цифровые элементы.

Как удалить лишние пробелы, переносы и экранировать символы в строке?
на вход приходит строка. нужно в любой приходящей строке удалять переносы на следующую строку.

$text = preg_replace('/ /',' ',$text1);
$text = preg_replace('|[\s]+|s', ' ', $text1);

Хм, затем что когда человек открывает тему, он читает ее сначала и зачем ему информация 3х летней давности?

не.. не такой подход.
Извините, но я по себе сужу: я прихожу в форум для чего? Чтобы получить ответ на некий вопрос. Форум тематический (подходящий). Есть вероятность, что такой вопрос (или подобный) уже задавали.
Соответственно, я перед тем как флудить возможно тем же самым лучше сначала поищу.
О! нашел! (как в данном случае) — но немножко не то.. соответственно, я уточнил вопрос. И мне тут же в этой теме ответили.

Тема стала более универсальной и при этом не размножилась.

На мой взгляд это как раз так и должно работать.

P.S. Да, возможно я и неправ, но кажется, что прав таки

ЦитатаСообщение от Laroux Посмотреть сообщение

Возможно и я не прав, просто я привык, к тому что для каждого вопроса создается своя тема. Т.е. если что то нужно, я ищу на форуме, если не нахожу(или нахожу подобное) , то создаю новую тему со своим вопросом, с отсылкой на старую. Но действительно не будем разводить холиваров

Удалить повторяющиеся строки
Для составления некой базы уникальной потребовалось удалять все те строки которые ранее попадались.

Удалить не повторяющиеся элементы массива
Здравствуйте! нужна функция типа array_keys(array_flip()) наоборот у меня есть массив В.

Удалить пробелы в utf-8
Пробелы между формами(( в windows-1251 перевожу — всё окей(именно с формами, а текст — билиберда).

Источник

Удаление лишних пробелов в PHP.

Обрабатывая информацию, собирая ее из разных источников, например с сайта поставщика, мы часто сталкиваемся с тем, что нам надо ее привести в достойный вид, удалив лишние пробелы.

Удаление пробелов в начале или конце строки.

Стандартные функция trim( string $str [, string $character_mask = » \t\n\r\0\x0B» ]) удаляет все возможные пробелы в начале или в конце строки, так же эта функция может удалять те символы, которые вам не нужны, например точку или запятую:

Так же есть 2 функции, ltrim и rtrim, которые работают так же как и trim, за исключением того , что ltrim удаляет символы в начале строки, а rtrim в конце.

Удаление лишних пробелов в самом тексте.

Иногда нужно удалить лишние пробелы, а иногда и табы, в самом тексте, например: «Купив телефон сегодня вы получите самый лучший подарок». В этом тексте после каждого слова стоит более 1 пробела, Попробуем заменить лишние через регулярное выражение:

В данном случае \s говорит что надо заменить все пробелы, а + включая табы на 1 пробел. Если вы считаете, что регулярные выражения зло, то можно использовать:

$str = str_replace(» «, » «, $str); while( strpos($str,» «)!==false)

Удаление «не удаляемых» пробелов.

Возможно вы столкнулись с такой проблемой, что ни одно из средств перечисленных выше не удаляет пробелы. Для начала рассмотрите внимательно текст, желательно в исходном коде, потому что текст « Купив телефон сегодня вы получите самый лучший подарок» может оказаться таким: «&nbsp;Купив  телефон сегодня вы получите самый лучший подарок». Для начала надо заменить &nbsp; и   просто на пробелы:

$str = str_replace('&', '&', $str); $str = str_replace(' ', ' ', $str);

А потом, применить один из способов, о котором я писал выше.

Хорошо, это мы сделали, но у нас остались лишние пробелы, которые не удаляются стандартными методами. Вероятнее всего это NO-BREAK SPACE, в таблице utf-8 символов он идет как c2 a0.

Для начала попробуйте перевести ваш текст в HEX:

echo bin2hex($str); echo substr_count($str, "\xc2\xa0");

и поищите там: c2a0, как видно на скриншоте, у меня аж 2 таких пробела

Удаление через регулярное выражение:

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 на обычный пробел, переводим обратно в обычный текст, после этого можно сделать замену пробелов и чистку.

Возможно у вас есть свой способ, может более практичный, как исправлять «не удаляемые» пробелы, то поделитесь в комментариях.

Источник

Удаление нескольких пробелов

Я получаю $row[‘message’] из базы данных MySQL, и мне нужно удалить все пробелы, такие как \n \t и т. Д.

$row['message'] = "This is a Text \n and so on \t Text text."; 

следует отформатировать в:

$row['message'] = 'This is a Text and so on Text text.'; 
 $ro = preg_replace('/\s\s+/', ' ',$row['message']); echo $ro; 

но он не удаляет \n или \t , а только отдельные пробелы. Может ли кто-нибудь сказать мне, как это сделать?

$ro = preg_replace('/\s+/', ' ',$row['message']); 

Вы используете \s\s+ что означает пробел (пробел, табуляция или новая строка), за которым следует одно или несколько пробелов. Это эффективно означает замену двух или более пробелов одним пространством.

Вы хотите заменить одно или несколько пробелов одиночными пробелами, так что вы можете использовать шаблон \s\s* или \s+ (рекомендуется)

/', '/[\t\n]/'), ' ', $str); echo $str; echo "\n---\n"; echo "$stripped"; ?> 
This is a string with spaces, tabs and newlines present --- This is a string with spaces, tabs and newlines present 

Я не могу воспроизвести проблему здесь:

$x = "this \n \t\t \n works."; var_dump(preg_replace('/\s\s+/', ' ', $x)); // string(11) "this works." 

Я не уверен, что это была просто ошибка транскрипции или нет, но в вашем примере вы используете строку с одним кавычком. \n и \t рассматриваются только как новая строка и табуляция, если у вас есть двойная кавычка. То есть:

Изменить : как указывал Codaddict, \s\s+ не заменяет один символ табуляции. Я все еще не думаю, что использование \s+ – эффективное решение, хотя, как бы об этом:

\s уже содержит вкладки и новые строки, поэтому этого выше регулярного выражения оказывается достаточно.

упрощенная до одной функции:

function removeWhiteSpace($text) < $text = preg_replace('/[\t\n\r\0\x0B]/', '', $text); $text = preg_replace('/([\s])\1+/', ' ', $text); $text = trim($text); return $text; > 

основанный на ответе Дануэла О’Нила.

$str='This is a Text \n and so on Text text.'; print preg_replace("/[[:blank:]]+/"," ",$str); 
$str = "This is a Text \n and so on \t Text text."; $str = str_replace(["\r", "\n", "\t"], " ", $str); while (strpos($str, " ") !== false) < $str = str_replace(" ", " ", $str); >echo $str; 
preg_replace('/(\s\s+|\t|\n)/', ' ', $row['message']); 

Это заменяет все вкладки, все строки новой строки и все комбинации нескольких пространств, вкладок и строк новой строки с одним пробелом.

 static function remove_whitespace($s = null) < return $ret = preg_replace('/[\s]+/', '', $s ); >static function remove_whitespace_feed( $s = null) < return $ret = preg_replace('/[\t\n\r\0\x0B]/', '', $s); >static function smart_clean($s = null) < return $ret = trim( self::remove_doublewhitespace( self::remove_whitespace_feed($s) ) ); >> $string = " Hey yo, what's \t\n\tthe sc\r\nen\n\tario! \n"; echo whitespace::smart_clean($string); 

Это то, что я буду использовать:

а. Обязательно используйте двойные кавычки, например:

$row['message'] = "This is a Text \n and so on \t Text text."; 

б. Чтобы удалить лишние пробелы, используйте:

$ro = preg_replace('/\s+/', ' ', $row['message']); echo $ro; 

Это может быть не самое быстрое решение, но я думаю, что это потребует наименьшего кода, и оно должно работать. Однако я никогда не использовал mysql, поэтому я могу ошибаться.

Я использую этот код и шаблон:

preg_replace('/\\s+/', ' ',$data) $data = 'This is a Text and so on Text text on multiple lines and with whitespaces'; $data= preg_replace('/\\s+/', ' ',$data); echo $data; 

Все, что вам нужно, это запустить его следующим образом:

echo preg_replace('/\s/', ' ', "This is a Text \n and so on \t Text text."); // This is a Text and so on Text text. 

По правде говоря, если вы думаете, что хотите что-то вроде этого:

это заменит несколько вкладок одной вкладкой

Без preg_replace, с помощью цикла.

 else < continue; >> echo implode("", $str_arr) ; ?> с  else < continue; >> echo implode("", $str_arr) ; ?> 

Источник

Как убрать все пробелы, если их больше одного

Я пытаюсь удалить все пробелы в PHP из html-контента, если он длиннее единицы, например, в такой цепочке:

Но не должно влиять на предложение вроде: О нас.

Должно ли это быть сделано с помощью регулярного выражения? Любая идея?

PS: переменная уже используется с trim (); который удаляет пробелы в конце и в начале, но не между символами …

Большое спасибо за вашу помощь.

Решение

$str = preg_replace(‘/\s+/’, ‘ ‘, $originalString);
echo $str;

Это заменит все пробелы одним пробелом.

Другие решения

Это довольно странная просьба, если вы спросите меня.

Возможно, вы могли бы сделать что-то вроде (принятый из принятого ответа, если кто-то еще может найти это полезным):

$str = preg_replace('/\s\s+/', '', $originalString); 

Это удалит все пробелы при условии, что по крайней мере 2 из них подряд.

Вы могли бы сделать что-то вроде этого:

Пример 1: Удалить пробелы, если их больше 1

 1) < # Example 1: Remove the whitespaces $string = preg_replace('/\s+/', '', $string); ># Ouput: HELLOIHAVEWHITESPACEEE!!1 echo $string; ?> 

Пример 2: обрезать пробелы

 1) < # Example 2: Remove the whitespaces $string = trim($string); ># Ouput: HELLO I HAVE WHITE SPACEEE!!1 echo $string; ?> 

Пример 3: заменить пробелы

 1) < # Example 1: Replace the whitespaces $string = preg_replace('/\s+/', ' ', $string); ># Ouput: HELLO I HAVE WHITE SPACEEE!!1 echo $string; ?> 
 1) < # Example 1: Replace the whitespaces $string = preg_replace('/\s\s+/', '', $string); ># Ouput: HELLOIHAVEWHITESPACEEE!!1 And I like bananas. echo $string; ?> 

Источник

Читайте также:  Css фреймворк для приложений
Оцените статью