Главная > Программирование > РНР: настольная книга программиста
<< Предыдущий параграф
Следующий параграф >>
<< Предыдущий параграф Следующий параграф >>
Макеты страниц

25.1. Функции удаления пробелов

Каждый из нас хотя бы раз совершал ошибки при вводе какой-либо информации в форму. Допустим, задумались, заболтались, отвлеклись — и вместо того чтобы ввести один пробел, вы ввели два или более. На первый взгляд казалось бы, что в этом может быть плохого? Например, вашапрограммасовершаетработу со строками и производит конкретный подсчет символов, скажем, до пробела. После этого выделяет слово и производит операцию над ним, считая, что все посчитанные позиции являются символами. Далее, пропустив пробел, переходит к подсчету следующих символов, при этом в случае внесения не одного пробела, а двух, программа посчитает эти две позиции как символы, в итоге могут возникнуть непредсказуемыеошибки.

В результате при получении строк, введенных пользователем в форму, они передаются в наш скрипт такими, какими они были введены — со всеми пробелами и неточностями. Процесс передачи данных из HTML-формы в PHP-скрипт был описан ранее (см. п. 9.6), поэтому будем приводить примеры скриптов, без HTML-тегов. Это поможет вам сконцентрировать внимание на более важных темах.

Функции, которые удаляют пробелы:

• chop(),

• trim(),

• ltrim(),

• rtrim().

Чтобы произвести удаление лишних пробелов в обрабатываемой строке, необходимо воспользоваться функцией chop(). Прежде всего разберемся, что значит лишние пробелы и в каком случае они действительно являются лишними.

Строка представляет собой совокупность символов, разделенных пробелами. Правильным считается, когда междукаждым словом установлено не более одного пробела (за исключением условий, когда это действительно необходимо, в этом случае о применении функции chop() речи не может идти вообще). Эта функция удаляет все повторяющиеся пробелы между словами. Ее синтаксис:

string chop(string str)

Функция chop() возвращает «правильную строку», т. е. строку, в которой будут удалены все лишние пробелы. Сама строка задается непосредственно на месте параметра str как в самой функции, так и при помощи переменной. Последний способ широко распространен среди программистов и является рекомендуемым, поэтому при изучении старайтесь уделять больше времени работе с самими переменными, а не с какими-то конкретными значениями.


ВНИМАНИЕ

Функция chop() в РНР отлична от функции chop() в Perl, так как функция chop() в Perl удаляет последнюю букву в указанной строке.


Рассмотрим пример работы функции chop():

<?php

$name = "Удалено два пробела, далее — три ! ! !";

$name1 = "Самая обычная строка!";

$line = chop ($name);

$line1 = chop ($name1);

$line2 = chop("ввв ввв ввв ввв ввв ввв !");

echo $line. "<br>";

echo $line1. "<br>";

echo $line2. "<br>";

?>

В данном примере приведено три случая. Первый — это строка с большим числом пробелов. Эту строку содержит переменная $name. Далее — обычная строка, показывающая, что функция не произведет никакой ошибки, если ей будет указана правильная строка. В этом случае она просто произведет поиск лишних пробелов и вернет ее в строку $line1. В качестве третьего применения функции строка указывается в самой функции без использования при этом переменных. Как уже говорилось, этот случай является не совсем удобным, хотя знать его надо. После выполнения

функции chop() получаются «правильные» строки, т. е. строки с удаленными пробелами. Функция echo() выводит эти функции на экран браузера. Результат работы данного скрипта будет следующий:

Удалено два пробела, далее — три ! ! !

Самая обычная строка!

ввв ввв ввв ввв ввв ввв !

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

Иногда необходимо произвести удаление лишних пробелов с конца или с начала строки или же одновременно.

Чтобы удалить пробел в начале строки, используется функция ltrim(). Для более простого запоминания можно написать lefttrim — это значит, что функция удаляет пробелы с левой стороны строки, т. е. сначала. По принципу работы функция аналогична chop(), это также можно отнести и к синтаксису функции ltrim():

string ltrim (string str)

Функция ltrim() возвращает указанную вместо параметра str, с удаленными лишними пробелами в начале строки. Функция также удаляет символы: \n, \r, \t, \v, \0.

Аналогично функции ltrim() осуществляют свою работу функции rtrim () и trim (). Функция rtrim () (righttrim — с правой стороны) удаляет все пробелы с конца строки. Ее синтаксис:

string rtrim (string str)

Как видно, он ничем не отличается от синтаксиса функции itrim (), аналогично можно сказать и про функцию trim():

string trim(string str)

Функция удаляет все пробелы с начала так и в конце одновременно. В этом состоит ее основное отличие от приведенных функций ltrim () и rtirm (). Приведем пример:

<?php

$name = " ррр ррр ррр ррр ррр ";

$name1 = " ррр ррр ррр ррр ррр ";

$name2 = " ррр ррр ррр ";

$line = ltrim($name);

$line1 = rtrim($name1);

$line2 = trim($name2);

echo "***".$line."***<br>";

echo "***".$line1."***<br>";

echo "***".$line2."***<br>";

?>

В данном примере для каждой функции создана своя строка с большим количеством символов. После применения рассмотренных функций все очень сильно изменилось:

1.*** ррр ррр ррр ррр ррр ***

2.*** ррр ррр ррр ррр ррр ***

3 *** ррр ррр ррр ***

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


ВНИМАНИЕ

По результату этого скрипта также можно заметить, что функции trim(), ltrim() и rtrim(), также как и chop(), удаляют лишние пробелы между символами. Помимо того, что они удаляют все пробелы с двух сторон (с начала и с конца строки, соответственно), эти функции еще возвращают «правильные строки», т. е. строки с удаленными лишними пробелами между символами.

Описанные функции удаления пробелов используются в РНР 3 и РНР 4.

<< Предыдущий параграф Следующий параграф >>
Оглавление