10 приемов работы со строками в PHP
Строки — очень важный тип данных, с которым приходится постоянно работать при решении задач веб разработки. В данной статье описаны 10 очень полезных приемов, которые сделают жизнь PHP разработчика легче.
Автоматическое удаление html тегов из строки
При использовании форм, заполняемых пользователем, иногда нужно удалить все лишние теги. Данная задача легко решается с помощью функции strip_tags():
1 | $text = strip_tags($input, ""); |
Получаем текст между $start и $end
Такая функция должна быть в арсенале разработчика: она получает оригинальную строку, начало и конец, а возвращает текст, который содержится между $start и $end.
1 | function GetBetween($content,$start,$end){ |
2 | $r = explode($start, $content); |
4 | $r = explode($end, $r[1]); |
Трансформация URL в гиперссылку
Если вы поместите URL в форме комментария в блоге WordPress, она автоматически трансформируется в гиперссылку. Если вы хотите реализовать такую же функциональность на своем сайте или в веб приложении, то можно использовать следующий код:
2 | $url = preg_replace("#http://([A-z0-9./-]+)#", '<a href="$1">$0</a>', $url); |
Разделяем текст в 140 символный массив для Twitter
Может быть вы знаете, что Twitter принимает сообщения длиной не более 140 символов. Если у вас есть планы организовать взаимодействие своего приложения с популярным социальным сайтом сообщений, то функция, которая обрезает сообщения до 140 символов, наверняка придётся вам ко двору.
01 | function split_to_chunks($to,$text){ |
02 | $total_length = (140 - strlen($to)); |
03 | $text_arr = explode(" ",$text); |
06 | foreach ($text_arr as $word){ |
07 | if ( strlen($message[$i] . $word . ' ') <= $total_length ){ |
08 | if ($text_arr[count($text_arr)-1] == $word){ |
09 | $message[$i] .= $word; |
11 | $message[$i] .= $word . ' '; |
15 | if ($text_arr[count($text_arr)-1] == $word){ |
18 | $message[$i] = $word . ' '; |
Удаляем URL из строки
Многие люди оставляют в комментариях блога URL, чтобы получить трафик или организовать обратную связь. Такие ссылки загрязняют блог и могут стать причиной расстройств владельца в случае их большого количества. Так что следующая функция будет очень полезна!
1 | $string = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $string); |
Конвертируем строку в слаг
Нужно генерировать слаг (для постоянной ссылки), который будет совместим с задачами SEO? Следующая функция принимает строку в качестве параметра и возвращает совместимый с задачами SEO слаг. Просто и эффективно!
2 | $str = strtolower(trim($str)); |
3 | $str = preg_replace('/[^a-z0-9-]/', '-', $str); |
4 | $str = preg_replace('/-+/', "-", $str); |
Парсинг файла CSV
CSV (Coma separated values — значения, разделённые запятой) файлы — простой способ для хранения и передачи данных, а парсинг таких файлов в PHP выполняется чрезвычайно просто. Не верите? Следующий код демонстрирует обработку CSV файла:
1 | $fh = fopen("contacts.csv", "r"); |
2 | while($line = fgetcsv($fh, 1000, ",")) { |
3 | echo "Contact: {$line[1]}"; |
Поиск строки в другой строке
Если строка содержится в другой строке и вам нужно найти ее, то задача решается просто:
3 | $str = strtolower($str); |
4 | $content = strtolower($content); |
6 | return strpos($content,$str) ? true : false; |
Проверяем, что строка начинается с определённого шаблона
Некоторые языки программирования, например, Java, имеют метод/функцию startWith, которая позволяет проверять, начинается ли строка с определённого шаблона. К сожалению, PHP не имеет такой простой встроенной функции.
Тем не менее, мы можем сделать её для себя, причём, очень просто::
1 | function String_Begins_With($needle, $haystack) { |
2 | return (substr($haystack, 0, strlen($needle))==$needle); |
Выделяем email из строки
Когда-нибудь удивлялись, как спамеры получают ваши email адреса? Все просто. Они берут веб страницу (например, с форума) и проводят парсинг html кода для выделения emails адресов. Ниже приведённый код получает строку в качестве параметра и печатает все email, которые содержатся в ней. Пожалуйста, не используйте данный код для спама!
01 | function extract_emails($str){ |
03 | $regexp = '/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i'; |
04 | preg_match_all($regexp, $str, $m); |
06 | return isset($m[0]) ? $m[0] : array(); |
09 | $test_string = 'Тестовая строка... |
13 | Проверяем другие форматы: |
15 | <a href="test3@example.org">foobar</a> |
21 | test7@example.net.org.com |
28 | print_r(extract_emails($test_string)); |