10 приемов работы со строками в PHP


Строки — очень важный тип данных, с которым приходится постоянно работать при решении задач веб разработки. В данной статье описаны 10 очень полезных приемов, которые сделают жизнь PHP разработчика легче.

Автоматическое удаление html тегов из строки

При использовании форм, заполняемых пользователем, иногда нужно удалить все лишние теги. Данная задача легко решается с помощью функции strip_tags():

1$text = strip_tags($input, "");

Получаем текст между $start и $end

Такая функция должна быть в арсенале разработчика: она получает оригинальную строку, начало и конец, а возвращает текст, который содержится между $start и $end.

1function GetBetween($content,$start,$end){
2    $r = explode($start, $content);
3    if (isset($r[1])){
4        $r = explode($end, $r[1]);
5        return $r[0];
6    }
7    return '';
8}

Трансформация URL в гиперссылку

Если вы поместите URL в форме комментария в блоге WordPress, она автоматически трансформируется в гиперссылку. Если вы хотите реализовать такую же функциональность на своем сайте или в веб приложении, то можно использовать следующий код:

1$url = "Jean-Baptiste Jung (http://www.webdevcat.com)";
2$url = preg_replace("#http://([A-z0-9./-]+)#", '<a href="$1">$0</a>', $url);

Разделяем текст в 140 символный массив для Twitter

Может быть вы знаете, что Twitter принимает сообщения длиной не более 140 символов. Если у вас есть планы организовать взаимодействие своего приложения с популярным социальным сайтом сообщений, то функция, которая обрезает сообщения до 140 символов, наверняка придётся вам ко двору.

01function split_to_chunks($to,$text){
02        $total_length = (140 - strlen($to));
03        $text_arr = explode(" ",$text);
04        $i=0;
05        $message[0]="";
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;
10                        } else {
11                                $message[$i] .= $word . ' ';
12                        }
13                } else {
14                        $i++;
15                        if ($text_arr[count($text_arr)-1] == $word){
16                                $message[$i] = $word;
17                        } else {
18                                $message[$i] = $word . ' ';
19                        }
20                }
21        }
22        return $message;
23}

Удаляем URL из строки

Многие люди оставляют в комментариях блога URL, чтобы получить трафик или организовать обратную связь. Такие ссылки загрязняют блог и могут стать причиной расстройств владельца в случае их большого количества. Так что следующая функция будет очень полезна!

1$string = preg_replace('/\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $string);

Конвертируем строку в слаг

Нужно генерировать слаг (для постоянной ссылки), который будет совместим с задачами SEO? Следующая функция принимает строку в качестве параметра и возвращает совместимый с задачами SEO слаг. Просто и эффективно!

1function slug($str){
2        $str = strtolower(trim($str));
3        $str = preg_replace('/[^a-z0-9-]/', '-', $str);
4        $str = preg_replace('/-+/', "-", $str);
5        return $str;
6}

Парсинг файла CSV

CSV (Coma separated values — значения, разделённые запятой) файлы — простой способ для хранения и передачи данных, а парсинг таких файлов в PHP выполняется чрезвычайно просто. Не верите? Следующий код демонстрирует обработку CSV файла:

1$fh = fopen("contacts.csv", "r");
2while($line = fgetcsv($fh, 1000, ",")) {
3    echo "Contact: {$line[1]}";
4}

Поиск строки в другой строке

Если строка содержится в другой строке и вам нужно найти ее, то задача решается просто:

2    if ($ignorecase){
3        $str = strtolower($str);
4        $content = strtolower($content);
5    }
6    return strpos($content,$str) ? true : false;
7}

Проверяем, что строка начинается с определённого шаблона

Некоторые языки программирования, например, Java, имеют метод/функцию startWith, которая позволяет проверять, начинается ли строка с определённого шаблона. К сожалению, PHP не имеет такой простой встроенной функции.
Тем не менее, мы можем сделать её для себя, причём, очень просто::

1function String_Begins_With($needle, $haystack) {
2    return (substr($haystack, 0, strlen($needle))==$needle);
3}

Выделяем email из строки

Когда-нибудь удивлялись, как спамеры получают ваши email адреса? Все просто. Они берут веб страницу (например, с форума) и проводят парсинг html кода для выделения emails адресов. Ниже приведённый код получает строку в качестве параметра и печатает все email, которые содержатся в ней. Пожалуйста, не используйте данный код для спама!

01function extract_emails($str){
02    // Регулярное выражение, которое извлекает все email из строки:
03    $regexp = '/([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+/i';
04    preg_match_all($regexp, $str, $m);
05 
06    return isset($m[0]) ? $m[0] : array();
07}
08 
09$test_string = 'Тестовая строка...
10 
11        test1@example.org
12 
13        Проверяем другие форматы:
14        test2@example.org;
15<a href="test3@example.org">foobar</a>
16<test4@example.org>
17 
18        Ещё проверка:
19        test5@example.org
20        test6[at]example.org
21        test7@example.net.org.com
22        test8@ example.org
23        test9@!foo!.org
24 
25        foobar
26';
27 
28print_r(extract_emails($test_string));
Img