Строка в php
Wab IT
Работа со строкой в PHP
Чаще в Вэб пространстве используется строка-текст.
Первое что мы учились делать в самом первом уроке, это работать с текстом. В этом уроке мы более подробно разберем, чем и как можно обрабатывать текст. И первая и чаще всего используемая для работы с текстом является конструкция echo и print . Пример
print 'Сумма = ' . 45 + 5; // 5. Конкатенация через точку до php-8.
echo 'Сумма = ' , 4 + 5; // Сумма = 9. Конкатенация через запятую, в любой версии php
print отличается от echo тем что всегда возращает значение 1. Можно использовать как в функциях так и в тернарных операторах. Пример
(5 == 5) ? print 'да я принт': print ' нет я эхо'; if ( print "привет" ) echo " я принт";
PHP автоматически преобразовывает тип строка в цифры, если там записаны цифры первыми. Пример
echo '2' * '2' - '1'; // выведет 3
Тоже самое будет если записать цифру в переменную как строку и даже добавить комментарий, что мы считаем. В php-8 выведет не критическую ошибку.
$q = '2 яблока'; $w = '2 груши'; echo $q * $w - "1 слива" ; // 3 /с ошибокй echo $q . $w - "1 слива" ; // 2 яблока1 / с ошибкой echo $q . $w.' 1 слива' ; // 2 яблока 2 груши 1 слива
Но если мы хотим вывести дробные числа, то в этом случае сработает конкатенация.
echo '2'.'2'; // 22 к 2 дописал 2
echo 2.2; // 2.2 дробное число
echo 2 . 2; // 22 с пробелом, к 2 дописал 2
echo 2. 2; // ошибка, с одним пробелом после или перед точкой
Функция strlen подсчет количества знаков в строке.
echo strlen('Следует заметить, что пробел, так же символ.'); // 79
Функция strlen возвращает количество байт, а не символов. Так как кириллица пишется многобайтовыми символами Юникода, то большинство символом считает как 2 байта, пробел идет как символ.
Читаем функцию.
strlen ( string $string ) : int
название функции (строка текст): число
Функция берет тип строка, текст и выдает тип число, количество символов
Для кириллицы в функциях используется приставка, mb_ , которая позволяет работать с многобайтовыми символами. mb_strlen
mb_strlen(string $string, ?string $encoding = null): int
?string $encoding = null
Параметр строка encoding представляет собой символьную кодировку. Многобайтный символ вычисляется как 1. Равно null берет значение из внутренней кодировки страницы или сайта.
$str = 'Следует заметить, что пробел, так же считается символом.';
echo mb_strlen($str,); // 56 знака
Отобразить букву можно так же, как в массиве по индексу, если кириллица, будет баг с кодировкой. Пример со строкой из чисел.
$num = ' 1234567'; // пробел заменил нам 0 начало счета
echo $num[2]; // получили 2, если убрать пробел получим 3
К примеру у нас длинный текст и мы хотим начать считать с конца. Причем в этом случае мы сможем работать так же с цифрами, но счет будет немного другой. Пример
echo '<p>' . $num[strlen($num) - 3]; // сразу вывели третий символ с конца
echo " тут - 3 " , strlen($num) - 3 ; // или так
$len = strlen($num) -1; // записали в переменную последний символ
echo ' последний символ '. $num[$len];
echo '<p> или так '. $len; echo $num[1] + $num[4]; // 5 посчитали
Превратите переменную num в тип число и посмотрите что будет.
Функция mb_strpos поиск позиции первого вхождения одной строки в другую
Функция( ' где ищем ', 'что ищем', число начало поиска);
Искать можно символы так и набор символов в том числе слова.
echo 'Где а после 4 символов ', mb_strpos('Параграф. ' , 'а', 4, ); // 6
Пример использование регистронезависимой функции mb_stripos
$text = 'Вдруг порвались те штаны БЛИН, из березовой коры'; // создали запись
$ban = 'блин'; // проверочную переменную с символами, в данном случае слово
$post = mb_stripos($text , $ban); // в переменной , ищем есть или нет символы
if ($post !== false){ // если условие не равно лжи, то есть слово такое есть
echo "вы ввели слова = $ban, запрещенные"; // то вывели это слово
} else {echo $text;} // если слова нет то выводим тест.
Строгое сравнение в приоритете. Научились работать со строковой функцией mb_stripos .
Две функции mb_substr и mb_strcut при помощи которых можно вырезать или обрезать текст.
mb_substr($строка, символ отсчета, сколько считать если -, то с конца строки, кодировка );
mb_strcut($строка, байт отсчета, сколько считать если нет то до конца );
echo $post = mb_substr($text , 3, 8); // уг порва // считает символы
echo '<p>' , $post = mb_strcut($text , 3, 8); // друг // считает байты
Научились работать с функциями mb_substr и mb_strcut
Функция explode разбивает строку на элементы массива
Читаем документацию
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
функции ( тип ' $разделитель', тип , $строка, тип $ число = количество): выдает массив
Функция explode ищет разделитель указанный между кавычками вначале, к примеру пробел
' ' или запятую ',' и по нему разбивает строку на указанное количество элементов и записывает в массиве. Пример
$str = 'Следует заметить, что пробел, так же считается символом.';
$text = explode(' ', $str, 4); // Разделитель пробелы, в переменной, считать только 4 пробела
echo $text[3]; // вывели все что после третьего пробела.
Меняем разделитель на запятую
$text = explode(',' , $str, 2); // считать 2 запятые
echo $text[1]; // вывести после первой
Если [0], то выведет до запятой, если 2 то ничего не выведет, а почему? Посмотрим.
print_r($text); // Array [0] => Следует заметить [1] => что пробел, так же считается символом.
Так как счет у нас начинается с 0, то в массив у нас записалось 2 индекса 0 и 1, а мы хотим вывести индекс 2 которого нет.
Функция implode объединяет элементы массива в строку
Функция implode наоборот объединяет элементы массива, но только по индексу и массив одного уровня, с возможностью указать разделитель. Возьмем переменную текст с массивом разделенным запятыми функцией explode, и объединим. При этом можем вместе где объединяем, указать свой разделитель, заменив все указанные разделители на свои, в том числе если разделители пробелы. Заменить можно на все что угодно.
Выше мы со строки в переменной $text создали массив, который разделили на 2 индекса, 0 до первой запятой, 1 после первой запятой. Объединим их функцией implode в этом разрыве и добавим для примера текст.
Функция( ' в кавычках на что менять ', имя массива);
echo implode(' \ , добавим текст , / ',$text); // добавили символы и текст вместо первой запятой.
Научились работать со строковой функциейimplode. Остальные спецификации читайте в мануале php.
Функция printf форматирование текста
В примере с explode мы текст превращали в массив, а в implode собирали его и смогли форматировать текст заменой символов. С функцией printf можно проделывать похожие манипуляции но с большей динамикой. Функция принтф позволяет вставлять в текст параметры которые можно менять по необходимости.
Записывается параметр знаком процента % и буква спецификатора, какой тип аргумента будем передавать $s. Можно указать порядок вывода знаком доллар %3$d. Аргументы записываются через запятую, 'строковые в кавычка' . Пример
printf (' тут вставим текст спецификатор s, %s ,</br>
тут цифры спецификатор d, %d </br> ',
' Я текст 1 </br> ',
123 ); // числовой аргумент. Закрыли функцию
Выведем переменные в обратном порядке.
$text= 'Я текст из переменной.'; // переменная строка
$num = '456 цифры из переменной'; // переменная число
printf('тут переменная строковая, %2$s <br>
тут переменная число, %1$d ',
$num,
$text );
Научились работать со строковой функцией printf. Остальные спецификации читайте в мануале php.
Функция str_replace и str_ireplace — меняет текст
При помощи этих двух функций можно заменить текст или данные из массива, различия лишь в том что str_replace регистрозависимый, а str_ireplace нет.
str_replace ( $search , $replace , $subject , $count );
функция ( ' 1 что нужно поменять ', ' 2 на что меняем ' , '3 где меняем ', '4 количество замененных знаков' ) ;
Пример
echo str_replace('поменяйте' , 'меняю' , 'поменяйте меня'); // меняю меня
Пример. Заменим в раннее созданной переменной, слово текст, на данные из второй переменной.
echo str_replace('текст' , $num, $text); // нашли в переменной text, слово текст и заменили его на переменную num.
echo str_replace('е' , "Е", $text, $count); // нашли буквы е и заменили на Е
echo $count; // посмотрели сколько букв было заменено.
Так мы можем заменять любые символы и даже массивы. Пример
$lat = ['A', 'B', 'C', 'D', 'E']; // у нас есть массив с набором символов
$kir = ['а', 'б', 'с', 'д', 'е']; // еще один массив с другим набором
$text = 'алфавит A B C d e'; // есть текст
$text2 = str_replace($lat, $kir, $text); // в переменной с текстом нашли символы из массива лат и заменили на символы с кир echo $text2; // алфавит а б с d e
Заметили поменялись не все, так как функция str_replace регистрозависимая. Поменяли на регистронезависимую функцию str_ireplace и весь текст с заглавными и прописными буквами, стал как и было задумано.
Функция trim, ltrim, rtim
Функция trim отрезать невидимые символы, \t, \n и т.д, вначале и в конце текста илиltrim только вначале, то есть слева, или rtrim только в конце, то есть справа.
функция( тип строка $текст, «в двойных кавычках пишем символы которые нужно удалить»);
если символы не переданы то удаляет включенные по умолчанию. Пример.
Trim удаляет в начале и в конце. Конструкция двоеточие удаляет диапазон символов от… до.
echo trim('..,..abc..,..', "."); // ,..abc.., , удалил точи до запятой echo trim('..,..abc..,..', ",."); // abc ,удалил и точки и запятые echo trim('abcdif', "a..c"); // dif , конструкция двоеточие удалил диапазон символов, буквы от a до d
Ltrim удаляет все что слева от текста
echo ltrim('..,..abc..,..', ",."); // abc..,..
Rtrim удаляет все что справа от текста
echo rtrim('..,..abc..,..', ",."); // ..,..abc
Мы научились работать с функциями trim, ltrim, rtrim. Детали вы сможете прочитать в документации.
Строковые функции используемые для безопасности сайта
Первая и самая часто используемая Функция htmlspecialchars() преобразующая специальные символы в HTML сущность. Это означает, что он заменит HTML символы, такие как < и > на < и > Что в свою очередь не позволит коду отработать, а выведет его как обычный текст.
Функция htmlspecialchars()
htmlspecialchars($string, $flags, $encoding, $double_encode): string
функция(берет строку, преобразует символы ', ", &, <, > , двойная кодировка): строка
В php 8.1 флаги изменены на ENT_QUOTES — Преобразует как двойные, так и одинарные кавычки. Пример
$text = '<Вдруг>& & "порвались" те \'штаны\' БЛИН, из березовой коры';
$text = htmlspecialchars($text);
echo $text; // <Вдруг>& & "порвались" те 'штаны' БЛИН, из березовой коры
Видим амперсант & вывелся, & закодировался, а amp; осталась и посмотрим исходный код. Вывелся амперсант & и двойные кавычки по умолчанию преобразовались, а одинарные мы экранировали, поэтому так и отобразились.
Поменяем двойную кодировку. Параметр double_encode = true включен по умолчанию и преобразуется все без ограничений. Для того чтобы поменять double_encode на выключен, нужно прописать полностью все параметры функции, а последний в false, то есть выключен
$text = htmlspecialchars($text, ENT_QUOTES, 'utf-8', false); // выключили double_encode
echo $text; // <Вдруг>& & "порвались" те 'штаны' БЛИН, из березовой коры
Теперь амперсант отобразился корректно.
И функция htmlspecialchars_decode, обратная функции htmlspecialchars.
htmlspecialchars_decode — Преобразует специальные HTML-сущности обратно в соответствующие символы. Для того чтобы отобразились все кавычки в версии ниже php-8.1, нужно флаг который по умолчанию сменить на ENT_QUOTES. В php-8.1 он по умолчанию.
$text = htmlspecialchars_decode($text, ENT_QUOTES); // <Вдруг>& & "порвались" те 'штаны' БЛИН, из березовой коры
Вы исходном коде так же и даже экранированные кавычки.
<Вдруг>& & «порвались» те 'штаны' БЛИН, из березовой коры
Мы научились работать с функциями htmlspecialchars и htmlspecialchars_decode. Детали вы сможете прочитать в документации.
Функция stripslashes — Удаляет экранирование символов
Работает так же как htmlspecialchars. Разница лишь в том, что преобразует все символы.
Функцию stripslashes() можно использовать, если экранирование символов не требуется. Например, данные не вставляются в базу данных, а просто выводятся в браузер. Пример
$text = '<Вдруг>& \\& \"порвались\\" те \'штаны\' БЛИН';
echo $text; // <Вдруг>& \& "порвались\" те 'штаны' БЛИН echo stripslashes($text); // <Вдруг>& & "порвались" те 'штаны' БЛИН
Мы научились работать с функцией stripslashes. Детали вы сможете прочитать в документации.
Функция strip_tags удаляет из строки теги HTML и PHP
strip_tags($string, array|string|null $allowed_tags = null): string
функция (берет строку, теги исключения можно записать в виде массива): строка
$text = 'Вдруг <p> "порвались" те \'штаны\' <br>БЛИН, <br /> из березовой<p> коры';
echo strip_tags($text, '<br>'); // br исключили из удаления
Вдруг «порвались» те 'штаны'
БЛИН,
из березовой коры
echo strip_tags($text, ['p', 'br']); // и оставили все переносы
Мы научились работать с функцией strip_tags. Детали вы сможете прочитать в документации.
В этом уроке мы научились работать с текстовыми встроенными функциями. После того как, вы сами неторопясь сделаете все упражнения, понимать работу и работать с остальными функция вам будет гораздо проще. Все функции для работы со строками в php вы сможеет найти php.net