chop()
Статья о функции PHP chop(), которая удаляет пробелы или другие символы с конца строки. Функция полезна для
Функция PHP chop() удаляет пробельные символы (или другие указанные символы) с конца (правой стороны) строки и возвращает результат. Начало строки она не затрагивает и никогда не изменяет исходную переменную — возвращается новая строка.
На этой странице рассматриваются синтаксис chop(), какие символы удаляются по умолчанию, как передать пользовательскую маску символов и типичные подводные камни.
chop() — псевдоним rtrim()
Самое важное: chop() — это просто псевдоним rtrim(). Обе функции идентичны по поведению — chop — более старое название (знакомое Perl-разработчикам), тогда как rtrim («правая обрезка») более описательно. В новом коде, как правило, предпочитают rtrim(), однако chop() по-прежнему встречается в существующих кодовых базах.
Если нужно удалить символы с левой стороны, используйте ltrim(); чтобы удалить символы с обеих сторон — trim().
Синтаксис
chop(string $string, string $characters = " \n\r\t\v\0"): stringФункция принимает один или два параметра:
$string— строка для обрезки.$characters(необязательный) — набор символов, удаляемых с конца. Если параметр не указан,chop()удаляет стандартные пробельные символы, перечисленные ниже.
Функция возвращает обрезанную строку. Аргумент передаётся по значению, поэтому сама переменная $string остаётся без изменений.
Символы, удаляемые по умолчанию
При вызове chop() с одним аргументом с конца строки удаляются следующие символы:
| Символ | Значение |
|---|---|
" " | обычный пробел |
"\t" | табуляция |
"\n" | перевод строки (новая строка) |
"\r" | возврат каретки |
"\0" | байт NUL |
"\v" | вертикальная табуляция |
Удаление пробелов в конце строки
Наиболее распространённое применение — очистка завершающих пробелов, табуляций или переносов строки, например после чтения строки из файла:
Добавляем |, чтобы граница обрезки была видна. Вывод:
Hello, World!|Завершающие пробелы удалены, всё, что было до них, остаётся нетронутым.
Использование маски символов
Передайте второй аргумент, чтобы удалить произвольный набор символов вместо пробельных. Каждый символ маски удаляется с конца строки повторно до тех пор, пока не встретится символ, не входящий в маску:
Вывод:
Hello, WorМаска "ld!" — это набор символов, а не подстрока. Читая справа налево: !, d, l, затем снова d — все они входят в набор и удаляются; r — не входит, поэтому обрезка останавливается.
Диапазоны символов с ..
Внутри маски можно задать диапазон с помощью двух точек. Например, "0..9" означает «любая цифра», поэтому следующий код удалит все цифры в конце:
<?php
echo chop("order100200", "0..9");
?>Вывод:
orderТипичные подводные камни
- Обрезаются только края, не середина.
chop("a b ")возвращает"a b"— пробелы междуaиbсохраняются. - Маска — это набор символов, а не буквальный суффикс.
chop("Hello, World!", "Hd")вернёт строку без изменений, поскольку последний символ!не входит в наборH/d, и обрезка не начнётся. - Исходная переменная не изменяется. Всегда присваивайте возвращаемое значение или используйте его напрямую:
$clean = chop($raw);.
Когда применять
chop() / rtrim() стоит использовать всякий раз, когда завершающие символы могут нарушить сравнение или отображение:
- Удаление символа новой строки в конце строки, прочитанной с помощью
fgets(). - Очистка пользовательского ввода перед сохранением.
- Удаление завершающего слеша из пути или URL:
rtrim($path, "/").
Для замены символов в любом месте строки (не только на краях) используйте str_replace().