Строки в PHP: функции, UTF-8 и практические приёмы для новичков

Строки в PHP: функции, UTF-8 и практические приёмы для новичков

Строки в PHP: функции, UTF-8 и практические приёмы для новичков

Если вы ищете понятное руководство по запросу строки в PHP, начните с главного: строка — это последовательность байтов, а не «магический» текстовый объект. Поэтому при работе с русским языком и эмодзи важно помнить про кодировку UTF-8 и использовать правильные функции. Ниже — практические примеры, которые помогут уверенно обрабатывать строки в PHP 8.

Создание строк: одинарные и двойные кавычки

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

<?php
$name = 'Анна';

echo 'Привет, $name'; // Привет, $name
echo "Привет, $name"; // Привет, Анна

Для простых текстов без переменных чаще выбирайте одинарные кавычки: так код чуть проще читать. Если нужна интерполяция переменных — используйте двойные.

Конкатенация строк

Для склеивания строк применяется оператор .. Это одна из базовых операций, которую нужно хорошо знать.

<?php
$firstName = 'Иван';
$lastName = 'Петров';

$fullName = $firstName . ' ' . $lastName;
echo $fullName; // Иван Петров

Если строка становится слишком длинной, лучше разбить её на несколько частей или использовать шаблон. Не превращайте HTML-разметку в огромную строку из десятков конкатенаций.

Длина строки: strlen или mb_strlen?

Одна из самых частых ошибок новичков — использовать strlen() для кириллицы. Эта функция считает байты, а не символы. Для UTF-8 используйте mb_strlen().

<?php
$text = 'Привет';

echo strlen($text);    // 12, потому что кириллица в UTF-8 занимает больше 1 байта
echo mb_strlen($text); // 6

Если mb_strlen() недоступна, проверьте, включено ли расширение mbstring. В современных PHP-проектах оно практически обязательно.

Обрезка пробелов: trim, ltrim и rtrim

Перед обработкой пользовательского ввода почти всегда полезно убрать лишние пробелы по краям строки.

<?php
$email = '  user@example.com  ';
$email = trim($email);

echo $email; // user@example.com
  • trim() удаляет символы с обеих сторон;
  • ltrim() — только слева;
  • rtrim() — только справа.
  • Важно: trim() не делает строку безопасной для вывода в HTML и не проверяет корректность email. Это просто очистка краёв строки.

    Проверка подстроки: str_contains, str_starts_with, str_ends_with

    В PHP 8 появились удобные функции для проверки строк. Они делают код понятнее, чем старые проверки через strpos().

    <?php
    $url = 'https://example.com/catalog';
    
    if (str_starts_with($url, 'https://')) {
        echo 'Безопасный протокол';
    }
    
    if (str_contains($url, 'catalog')) {
        echo 'Это страница каталога';
    }
    
    if (str_ends_with($url, '/catalog')) {
        echo 'URL заканчивается на /catalog';
    }
    

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

    Регистр строк и UTF-8

    Для английского текста подойдут strtolower() и strtoupper(), но для русского языка лучше использовать функции mb_strtolower() и mb_strtoupper().

    <?php
    $title = 'PHP ДЛЯ НАЧИНАЮЩИХ';
    
    echo mb_strtolower($title); // php для начинающих
    

    Если вы делаете поиск по названию товара или статьи, нормализуйте обе строки одинаково: например, обрежьте пробелы и приведите к нижнему регистру.

    <?php
    $query = mb_strtolower(trim('  Ноутбук  '));
    $product = mb_strtolower('Игровой ноутбук');
    
    if (str_contains($product, $query)) {
        echo 'Товар найден';
    }
    

    Разбиение и сборка строк: explode и implode

    explode() разбивает строку на массив, а implode() собирает массив обратно в строку. Это удобно для тегов, CSV-подобных значений, списков и простых настроек.

    <?php
    $tagsString = 'php, mysql, backend';
    $tags = explode(',', $tagsString);
    
    $cleanTags = [];
    foreach ($tags as $tag) {
        $cleanTags[] = trim($tag);
    }
    
    echo implode(' | ', $cleanTags); // php | mysql | backend
    

    Совет: после explode() часто нужно пройтись по элементам и применить trim(), иначе в массиве останутся лишние пробелы.

    Замена текста: str_replace

    Для простой замены используйте str_replace(). Она быстрее и понятнее, когда не нужны сложные шаблоны.

    <?php
    $phone = '+7 (999) 123-45-67';
    $normalized = str_replace([' ', '(', ')', '-'], '', $phone);
    
    echo $normalized; // +79991234567
    

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

    Безопасный вывод строк в HTML

    Строки, полученные от пользователя, нельзя просто выводить на страницу. Это может привести к XSS-уязвимости. Для HTML-вывода используйте htmlspecialchars().

    <?php
    $comment = '<script>alert("XSS")</script>';
    
    echo htmlspecialchars($comment, ENT_QUOTES, 'UTF-8');
    

    Правило простое: данные очищайте по смыслу, а экранируйте там, где выводите. Для HTML — htmlspecialchars(), для SQL — подготовленные запросы, для URL — функции кодирования URL.

    Практический пример: подготовка заголовка статьи

    Соберём небольшую функцию, которая принимает заголовок, убирает лишние пробелы, ограничивает длину и безопасно выводит результат.

    <?php
    function prepareTitle(string $title, int $maxLength = 60): string
    {
        $title = trim($title);
    
        while (str_contains($title, '  ')) {
            $title = str_replace('  ', ' ', $title);
        }
    
        if (mb_strlen($title) > $maxLength) {
            $title = mb_substr($title, 0, $maxLength - 1) . '…';
        }
    
        return htmlspecialchars($title, ENT_QUOTES, 'UTF-8');
    }
    
    echo prepareTitle('   Строки   в PHP:   полезные функции для новичков   ');
    

    Здесь важно использовать mb_substr(), а не substr(), чтобы не обрезать русские символы некорректно.

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

  • Использовать strlen() и substr() для UTF-8-текста на русском языке.
  • Забывать trim() при обработке данных из форм.
  • Выводить пользовательские строки без htmlspecialchars().
  • Сравнивать строки без нормализации регистра и пробелов.
  • Использовать сложные регулярные выражения там, где достаточно str_replace() или explode().
  • Что учить дальше

    После базовых функций строк стоит разобраться с массивами, формами, безопасностью, базами данных и архитектурой простых PHP-приложений. Если хотите пройти этот путь последовательно и с практикой, посмотрите курс «PHP и MySQL с Нуля до Гуру 3.0» — понятный маршрут от основ PHP до работы с MySQL.

    Итоги

    Работа со строками в PHP — фундаментальный навык. Запомните базовый набор: trim(), mb_strlen(), mb_substr(), str_contains(), explode(), implode(), str_replace() и htmlspecialchars(). Этого уже достаточно, чтобы аккуратно обрабатывать пользовательский ввод, готовить текст к выводу и избегать типичных ошибок новичков.

    Источник

    НЕТ КОММЕНТАРИЕВ

    Оставить комментарий