- Строка php определенные символы
- Обращение к символам строки
- Специальные функции и расширение mbstring
- Функции strpos() и mb_strpos()
- Функция strrpos()
- Функция trim()
- Изменение регистра
- Функция strlen()
- Получение подстроки
- Замена подстрок
- Строка php определенные символы
- Получить символ строки кириллица utf-8
- Как получить символ строки кириллица utf-8
- Получить символ строки кириллица utf-8 -> mb_substr
- PHP: substr и мощные альтернативы, чтобы вырезать часть строки
- Получаем строку начиная с определенного символа
- Получаем определенное количество символов
- Вырезаем символы с конца
- Получаем несколько последних символов
- Получаем первый символ строки
- Получаем последний символ строки
- Получение подстроки по регулярному выражению
- Проблема при работе с многобайтовыми кодировками.
- Продвинутая работа со строками
Строка php определенные символы
Строки играют большую роль, задачи на парсинг строк довольно часто встречаются в PHP , поэтому рассмотрим некоторые базовые функции работы со строками.
Строки представляют некоторый текст, который заключен в одинарные или двойные кавычки:
$str1 = "Hello"; $str2 = 'Welcome';
Но также PHP позволяет определить строку и без кавычек с помощью оператора
В данном случае «LABEL» — это название метки, которая указывает на начало и конец строки. Название метки произвольное. То есть все, что расположено между
И в данном случае, как и в обычной строке мы можем использовать переменные:
Обращение к символам строки
PHP позволяет обращаться к отдельным символам строки как к элементам массива по числовому индексу:
$str = "Hello Tom"; echo $str[0];// получим первый символ - H $str[1] = "i"; // поменяем второй символ echo "
" . $str . "
"; // Hillo Tom
Индексация символов, как и в массиве, начинается с нуля.
Специальные функции и расширение mbstring
Кроме некоторых базовых возможностей по работе со строками PHP также предоставляет ряд специальных функций. Для некоторых из них требуется подключить специальное расширение — mbstring.dll . Для подключения этого расширения откроем файл конфигурации PHP — php.ini и найдем в нем следующую строку:
Раскомментируем ее, убрав точку с запятой.
Также убедимся, что у нас указан путь к папке расширений.
Найдем в файле php.ini строку:
Эта строка указывает на каталог с подключаемыми расширениями для PHP. По умолчанию все расширения располагаются в папке ext . Раскомментируем эту строку, убрав точку с запятой, и укажем полный путь к папке ext . Так, в моем случае папка c php расположена в корне диска C (ОС Windows), соответственно я указываю путь «C:\php\ext»:
И так как у нас файл php.ini изменился, перезапустим веб-сервер Apache.
Подключение расширения mbstring позволит задействовать некоторые дополнительные функции для работы со строками, которые в стандартном наборе PHP отсутствуют (такие функции обычно начинаются с префикса mb_ ).
Функции strpos() и mb_strpos()
Функция strpos($str, $search) возвращает позицию подстроки или символа $search в строке $str или значение false , если строка $str не содержит подстроки $search:
$input = «This is the end»; $search = «is»; $position = strpos($input, $search); // 2 if($position!==false)
При использовании этой функции надо учитывать, что индексация символов в строке начинается с нуля, поэтому позиция символа «T» будет равна 0. Поэтому сравнение $position!=false будет работать некорректно, ведь false и 0 при сравнении и приведении к общему типу будут представлять одно и то же значение. Поэтому в данном случае корректно использовать только операцию эквивалентности: $position!==false или $position===false .
Теперь применим функцию на другом примере:
$input = "Мама мыла раму"; $search = "мы"; $position = strpos($input, $search); // 9
Неожиданно, но результатом функции будет число 9. Хотя мы видим, что истинная позиция подстроки «мы» в исходной строке равна 5.
Все дело в том, что некоторые строковые функции не всегда корректно обрабатывают кириллические символы, и для них лучше использовать другую функцию — mb_strpos() :
$position = mb_strpos($input, $search); // 5
Функция strrpos()
Функция strrpos() во многом аналогична функции strpos() , только ищет позицию не первого, а последнего вхождения подстроки в строку:
$input = "This is the end"; $search = "is"; $position = strrpos($input, $search); // 5
Но опять же данная функция не совсем корректно работает с кириллическими символами, поэтому нам надо использовать ее аналог — mb_strrpos() :
$position = mb_strrpos($input, $search);
Функция trim()
Функция trim($str) удаляет из строки начальные и конечные пробелы, а также управляющие символы \n, \r, \t:
$input = " Мама мыла раму "; $input = trim($input);
Изменение регистра
Для перевода строки в нижний регистр используется функция strtolower :
$input = "The World is Mine"; $input = strtolower($input);
Для перевода в нижний регистр строки с кириллическими символами можно использовать функцию mb_strtolower :
$input = mb_strtolower($input);
Для перевода строки в верхний регистр примеяются функции strtoupper() / mb_ strtoupper() , которые работают аналогично.
Функция strlen()
Функция strlen() возвращает длину строки, то есть количество символов в ней:
$input = "Hello world"; $num = strlen($input); echo $num;
Функция strlen() также некорректно работает с кириллицей, поэтому в этом случае лучше применять функцию mb_strlen() :
$input = "Мама мыла раму"; $num = mb_strlen($input); echo $num;
Получение подстроки
Применяя функцию substr($str, $start [, $length]) , можно получить из одной строки ее определенную часть. Данная функция обрезает строку $str, начиная c символа в позиции $start до конца строки. С помощью дополнительного необязательного параметра $length можно задать количество вырезаемых символов.
$input = "The world is mine!"; $subinput1 = substr($input, 2); $subinput2 = substr($input, 2, 6); echo $subinput1; echo "
"; echo $subinput2;
Так как данная функция некорректно работает с кириллицей, то вместо нее следует применять функцию mb_substr() , которая действует аналогично:
$input = "Мама мыла раму"; $subinput1 = mb_substr($input, 2); $subinput2 = mb_substr($input, 2, 6);
Замена подстрок
Для замены определенной части строки применяется функция str_replace($old, $new, $input) . Эта функция заменяет в строке $input все вхождения подстроки $old на подстроку $new с учетом регистра:
$input = "Мама мыла раму"; $input = str_replace("мы", "ши", $input); echo $input;
Строка php определенные символы
Для иллюстрации получения символа строки нам потребуется какая-то строка:
Опять предположим, что нам потребуется 5 символ нашей строки, поступаем как с массивом и выедем определенный символ строки с помощью echo:
Результат получения и вывода определенного символа строки:
Если вы были внимательны, то должны были обратить внимание, на то, что буква выводится 6 по счету. а нам нужна была 5. дело в том, что здесь работает тоже правило, что и с массивом. счет начинается с нуля. и [0] это 1. как бы странно это не звучало! смайлы , возможно, что через несколько лет вы привыкните, а может и нет. смайлы
Получить символ строки кириллица utf-8
В свое время я пересел на кодировку utf-8, почему!? Да просто как-то притомился с вылезанием постоянных крокозябер!
Мы победили крокозябры, но! Проблема в том. что php(редиска, это не такая уж большая проблема. если вы знаете, что делать) не очень любит кириллицу в кодировке utf-8, у нас будет отдельная страница в utf-8 не работает, поэтому не будем растекаться по древу.
Как получить символ строки кириллица utf-8
Для иллюстрации получения символа строки в кириллице, нам потребуется эта самая строка на кириллице.
Если мы проделаем тоже, что было применено в выше идущем пункте.
Как я не пытался различными способами решить именно такой способ получения символа строки, увы я не смог решить этот ребус! Но. разве это когда-то нас останавливало!? У нас есть для этого функция, которые в состоянии получить определенный символ строки. получим. пусть это будет первый элемент строки:
Нам нужно перекодировать строку в windows-1251 применяем функцию substr, третьим значением ставим тот символ строки который хотим получить, и третьим шагом возвращаем кодировку строки.
$string_1 = ‘Привет мир!’;
$stroka = iconv(‘UTF-8′,’windows-1251’,$string_1 ); //Меняем кодировку на windows-1251
$stroka = substr($stroka , 0 , 1); //Получаем требуемый(1) символ строки
$stroka = iconv(‘windows-1251′,’UTF-8’,$stroka ); //Меняем кодировку на windows-1251
Результат получения определенного символа строки:
Получить символ строки кириллица utf-8 -> mb_substr
Вообще, если у вас кириллица, то должна работать функция mb_substr, не то, чтобы, я с утра до вечера пользуюсь функциями с mb, но сколько бы я не использовал их, то всегда с ними что-то не то.
если мы сейчас применим функцию mb_substr:
Для того, чтобы данная функция получила определенный символ строки, то нужно объявить кодировку внутри скрипта.
Результат получения символа строки с помощью mb_substr
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'