- PHP substr
- Introduction to the PHP substr() function
- PHP substr() function examples
- 1) Simple PHP substr() function example
- 2) Using PHP substr() function with the default length argument
- PHP substr() function with negative offset
- PHP substr() function with negative length
- The PHP mb_substr() function
- PHP substr helper function
- Summary
- PHP: substr и мощные альтернативы, чтобы вырезать часть строки
- Получаем строку начиная с определенного символа
- Получаем определенное количество символов
- Вырезаем символы с конца
- Получаем несколько последних символов
- Получаем первый символ строки
- Получаем последний символ строки
- Получение подстроки по регулярному выражению
- Проблема при работе с многобайтовыми кодировками.
- Продвинутая работа со строками
- Функция substr
- Синтаксис
- Пример
- Пример
- Пример
- Пример
- Пример
- Смотрите также
PHP substr
Summary: in this tutorial, you’ll learn how to use the PHP substr() function to extract a substring from a string.
Introduction to the PHP substr() function
The substr() function accepts a string and returns a substring from the string.
Here’s the syntax of the substr() function:
substr ( string $string , int $offset , int|null $length = null ) : string
Code language: PHP (php)
- $string is the input string.
- $offset is the position at which the function begins to extract the substring.
- $length is the number of characters to include in the substring. If you omit the $length argument, the substr() function will extract a substring from the $offset to the end of the $string . If the $length is 0, false, or null, the substr() function returns an empty string.
PHP substr() function examples
Let’s take some examples of using the substr() function.
1) Simple PHP substr() function example
The following example uses the substr() function to extract the first three characters from a string:
$s = 'PHP substring'; $result = substr($s, 0, 3); echo $result;// PHP
Code language: HTML, XML (xml)
In this example, the substr() function extract the first 3 characters from the ‘PHP substring’ string starting at the index 0.
2) Using PHP substr() function with the default length argument
The following example uses the substr() function to extract a substring from the ‘PHP substring’ string starting from the index 4 to the end of the string:
$s = 'PHP substring'; $result = substr($s, 4); echo $result; // substring
Code language: HTML, XML (xml)
In this example, we omit the $length argument. Therefore, the substr() returns a substring, starting at index 4 to the end of the input string.
PHP substr() function with negative offset
The $offset argument can be a negative number. If the $offset is negative, the substr() function returns a substring that starts at the offset character from the end of the string. The last character in the input string has an index of -1 .
The following example illustrates how to use the substr() function with negative offset:
$s = 'PHP is cool'; $result = substr($s, -4); echo $result; // cool
Code language: HTML, XML (xml)
In this example, the substr() returns a substring that at 4th character from the end of the string.
The following picture illustrates how the substr() function works in the above example:
PHP substr() function with negative length
Like the $offset argument, the $length argument can be negative. If you pass a negative number to the $length argument, the substr() function will omit a $length number of characters in the returned substring.
The following example illustrates how to use the substr() with a negative $offset and $length arguments:
$s = 'PHP is cool'; $result = substr($s, -7, -5); echo $result; // is
Code language: HTML, XML (xml)
The following picture illustrates how the above example works:
The PHP mb_substr() function
See the following example:
$message = 'adiós'; $result = substr($message, 3, 1); echo $result;
Code language: HTML, XML (xml)
This example attempts to extract a substring with one character in the $message string starting at index 3. However, it shows nothing in the output.
The reason is that the $message string contains a non-ASCII character. Therefore, the substr() function doesn’t work correctly.
To extract a substring from a string that contains a non-ASCII character, you use the mb_substr() function. The mb_substr() function is like the substr() function except that it has an additional encoding argument:
mb_substr ( string $string , int $start , int|null $length = null , string|null $encoding = null ) : string
Code language: PHP (php)
The following example uses the mb_substr() function to extract a substring from a string with non-ASCII code:
$message = 'adiós'; $result = mb_substr($message, 3, 1); echo $result;
Code language: HTML, XML (xml)
PHP substr helper function
The following defines a helper function that uses the mb_substr() function to extract a substring from a string:
function substring($string, $start, $length = null) < return mb_substr($string, $start, $length, 'UTF-8'); >
Code language: HTML, XML (xml)
Summary
- Use the PHP substr() function to extract a substring from a string.
- Use the negative offset to extract a substring from the end of the string. The last character in the input string has an index of -1 .
- Use the negative length to omit a length number of characters in the returned substring.
- Use the PHP mb_substr() function to extract a substring from a string with non-ASCII characters.
PHP: substr и мощные альтернативы, чтобы вырезать часть строки
Поговорим о том, как обрезать строку в PHP. Функция substr в предназначена для получения части строки. Она выделяет подстроку из переданной строки и возвращает её. Для этого нужно указать строку, порядковый номер символа, начиная с которого нужно вырезать строку, порядковый номер символа, до которого мы верезаем подстроку.
Обратите внимание, что substr неправильно работает с многобайтовыми кодировками, поэтому мы будем использовать mb_substr, которая работает с ними корректно. Об этой проблеме немного ниже.
mb_substr( string $string, int $start, int|null $length = null, string|null $encoding = null ): string
- $string — строка, из которой мы будем вырезать подстроку
- $start — символ, с которого мы будем вырезать подстроку
- $length — сколько символов мы будем вырезать (по умолчанию будем вырезать все оставшиеся)
- $encoding — кодировка
Теперь перейдем к примерам.
Получаем строку начиная с определенного символа
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8); echo $result; // результат: phpstack.ru/admin/
Мы вырезали первые 8 символов из строки, содержащей URL адрес.
Получаем определенное количество символов
Теперь давайте вырежем еще и «/admin/» в конце.
Мы бы могли сделать это указав количество символов, которое нужно взять, оно равно количеству символов в домене, их 11
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8, 11); // возьмем 11 символов начиная с 8-го echo $result; // результат: phpstack.ru
Вырезаем символы с конца
Что если мы не знаем количества символов в домене, но знаем что нужно вырезать строку «/admin/», длина которой составляет 7 символов? Иными словами нам нужно вырезать с конца.
В таком случае нужно указать отрицательное число:
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 8, -7); // удаляем 8 символов с начала и 7 символов с конца echo $result; // результат: phpstack.ru
Получаем несколько последних символов
Что если нам нужно вернуть наоборот только 7 последних символов? Тогда код будет следующим:
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, -7); // Получаем 7 символов с конца, остальное удаляем echo $result; // результат: /admin/
Получаем первый символ строки
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, 0, 1); // Начиная с 0 берем 1 символ echo $result; // результат: h
Получаем последний символ строки
$url = 'https://phpstack.ru/admin/'; $result = mb_substr($url, -1); // начинаем на 1 символ относительно конца echo $result; // результат: /
Получение подстроки по регулярному выражению
Если вам не хватает возможностей substr, возможно вам необходим более мощный инструмент: preg_match — эта функция позволяет получить подстроки по регулярному выражению.
Проблема при работе с многобайтовыми кодировками.
$url = 'привет'; $result1 = mb_substr($url, 3); // удаляем 3 символа с начала $result2 = substr($url, 3); // удаляем 3 символа с начала var_dump($result1); // вет var_dump($result2); // �ивет
Что случилось? Почему в первом случае, где мы использовали mb_substr все сработало хорошо, а во втором случае вернулся какой-то битый символ?
Дело в том, что в UTF-8 кириллица кодируется 2 байтам, вместо одного. substr считает, что символ равен байту и поэтому вырезает 3 байта с начала. Таким образом она вырезала букву «П», и только половину буквы «Р». В общем вы поняли: всегда используйте mb_substr когда работаете с текстом, который потенциально может содержать многобайтовые символы.
Продвинутая работа со строками
Если вы часто работаете со строками, вам пригодится это расширение: symfony/string
С его помощью вы сможете легко вырезать строки. Взгляните на несколько примеров:
// returns a substring which starts at the first argument and has the length of the // second optional argument (negative values have the same meaning as in PHP functions) u('Symfony is great')->slice(0, 7); // 'Symfony' u('Symfony is great')->slice(0, -6); // 'Symfony is' u('Symfony is great')->slice(11); // 'great' u('Symfony is great')->slice(-5); // 'great' // reduces the string to the length given as argument (if it's longer) u('Lorem Ipsum')->truncate(3); // 'Lor' u('Lorem Ipsum')->truncate(80); // 'Lorem Ipsum' // the second argument is the character(s) added when a string is cut // (the total length includes the length of this character(s)) u('Lorem Ipsum')->truncate(8, '…'); // 'Lorem I…' // if the third argument is false, the last word before the cut is kept // even if that generates a string longer than the desired length u('Lorem Ipsum')->truncate(8, '…', false); // 'Lorem Ipsum'
Функция substr
Функция substr вырезает и возвращает подстроку из строки. Сама строка при этом не изменяется. Первым параметром функция принимает строку, вторым — позицию символа, откуда следует начинать вырезание, а третьим — количество символов. Учтите, что нумерация символов строки начинается с нуля.
Второй параметр может быть отрицательным — в этом случае отсчет начнется с конца строки, при этом последний символ будет иметь номер -1 .
Третий параметр можно не указывать — в этом случае отрезание произойдет до конца строки.
Данная функция неправильно работает с кириллицей. Используйте функцию mb_substr (она работает аналогичным образом, но корректно обрабатывает кириллицу).
Синтаксис
Пример
Давайте вырежем 3 символа из строки позиции 1 (со второго символа, так как первый имеет номер 0):
Результат выполнения кода:
Пример
Давайте вырежем все символы до конца строки, начиная со второго (он имеет номер 1):
Результат выполнения кода:
Пример
Давайте вырежем третий и второй символы с конца, для этого укажем начало вырезания -3 (это номер третьего символа с конца), а количество символов — 2 :
Результат выполнения кода:
Пример
Давайте вырежем 2 последних символа, для этого укажем позицию предпоследнего символа (это -2), а третий параметр не укажем — в этом случае обрезание будет до конца строки:
Результат выполнения кода:
Пример
Давайте вырежем последний символ:
Результат выполнения кода: