Строка в php

Wab IT

Строка в php

Работа со строкой в 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>&nbsp;&nbsp;
 
  тут  цифры спецификатор d, %d&nbsp; </br>&nbsp;',&nbsp;
 
   ' Я текст 1 </br>&nbsp;',&nbsp;
 
 
 123  );  // числовой аргумент. Закрыли функцию
 

Выведем переменные в обратном порядке.

 
 $text= 'Я текст из переменной.';  //  переменная строка
 
 
$num = '456 цифры из переменной';  //  переменная число
 
 
 printf('тут переменная строковая, %2$s  <br>
 
  тут переменная число, %1$d  ',&nbsp;&nbsp;
 
   $num,&nbsp;&nbsp;
 
 
$text  );&nbsp;&nbsp;
 

Научились работать со строковой функцией 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 = '<Вдруг>& &amp; "порвались" те \'штаны\' БЛИН, из березовой коры';
$text = htmlspecialchars($text);
echo $text; // <Вдруг>& &amp; "порвались" те 'штаны' БЛИН, из березовой коры

 Видим амперсант & вывелся, & закодировался, а amp;  осталась и посмотрим исходный код. Вывелся амперсант &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 = '<Вдруг>& \\&amp; \"порвались\\" те \'штаны\' БЛИН'; 
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

12:00
553
Lit
RSS
Нет комментариев. Ваш будет первым!

Похожий контент

 PHP язык с динамической типизацией. В переменной может лежать любой тип, которы...
Функции function в phpФункции это участок кода function, где вы обрабатываете передаваем...
В PHP подключаем файлы операторами include и require.  В этом уроке мы научимс...
Массивы в PHP это набор упорядоченных данных. Создадим ассоциацию для массива, массив - ...