Способы подстановки текста в строке с помощью PHP
Основные способы замены слов в строке PHP
Как быстро и безопасно заменить одно слово на другое в строке?
Наиболее эффективным и часто используемым решением является функция str_replace(). Она выполняет регистрозависимую замену всех вхождений искомой подстроки на заданную строку.
<?php
$text = 'Привет, мир! Мир прекрасен.';
$result = str_replace('мир', 'земля', $text);
echo $result;
?>
Php заменить слово (замена слова в строке php)
Привет, земля! земля прекрасен.
Php определить кодировку (определение кодировки строки в php (mb_detect_encoding))
В этом примере каждое вхождение слова 'мир' (в нижнем регистре) заменяется на 'земля'. Обратите внимание, что слово 'Мир' с заглавной буквы не было заменено, так как функция чувствительна к регистру.
Типичная ошибка:
Забывают, что str_replace() заменяет все вхождения, а не только первое. Если требуется заменить только первое найденное слово, эта функция не подходит. Кроме того, при работе с многобайтовыми кодировками (например, UTF-8) могут возникнуть проблемы с неправильным подсчетом позиций, хотя сама замена работает корректно.
Как сделать замену без учёта регистра?
Для регистронезависимой замены используется str_ireplace() (аналог str_replace(), но без чувствительности к регистру).
<?php
$text = 'Мир прекрасен. миру мир.';
$result = str_ireplace('мир', 'земля', $text);
echo $result;
?>
Php размер строки (определение размера строки в php)
земля прекрасен. земля земля.
Php первое слово (первое слово в строке php)
Проблема: при замене может измениться регистр заменённого слова (в примере 'Мир' стал 'земля' с маленькой буквы). Для сохранения регистра нужно либо использовать регулярные выражения, либо дополнительные проверки.
Что делать, если нужна замена по шаблону (регулярные выражения)?
Функция preg_replace() предоставляет мощные возможности замены с использованием регулярных выражений. Она может заменить не только конкретное слово, но и группу слов, совпадающих с шаблоном.
<?php
$text = 'Цена 100 руб. Скидка 20%';
$pattern = '/\d+/'; // любая последовательность цифр
$replacement = '[число]';
$result = preg_replace($pattern, $replacement, $text);
echo $result;
?>
поиск слова php (поиск слова в строке php)
Цена [число] руб. Скидка [число]%
Php строка содержит (php строка содержит подстроку)
Регулярные выражения позволяют заменить только целые слова (с использованием границ слов \b), обращаться к захваченным группам в замене и т.д.
Частая ошибка:
Неправильное экранирование спецсимволов в шаблоне. Если в строке замены есть символы, имеющие специальное значение в регулярных выражениях (например, $ или \), их нужно экранировать с помощью preg_quote(). Также preg_replace() может вернуть NULL при ошибке, что часто игнорируется.
Как заменить слово только в начале или конце строки?
Для замены в определённой позиции можно использовать substr_replace(). Эта функция заменяет часть строки, начиная с заданного смещения и длиной.
<?php
$text = 'Привет, мир';
// Заменить первые 6 символов ("Привет") на "Пока"
$result = substr_replace($text, 'Пока', 0, 6);
echo $result;
?>
Пока, мир
Этот способ удобен, когда точно известно, где находится заменяемый фрагмент (по смещению и длине). Но для поиска слова по значению без регулярных выражений эта функция неэффективна.
Проблема: при работе с многобайтовыми строками нужно использовать mb_substr_replace() (из расширения mbstring), так как стандартная функция считает длину в байтах.
Как заменить слово с учётом многобайтовых кодировок (UTF-8)?
Стандартные str_replace() и preg_replace() корректно работают с UTF-8, если используются соответствующие модификаторы (например, /u для preg_replace). Однако для безопасной замены с учётом кодировки можно использовать mb_ereg_replace() из расширения mbstring, которая поддерживает многобайтовые регулярные выражения.
<?php
$text = 'Пример с кириллицей: строка';
$result = mb_ereg_replace('кириллицей', 'латиницей', $text, 'i'); // 'i' - регистронезависимо
echo $result;
?>
Пример с латиницей: строка
Примечание: mb_ereg_replace() не поддерживает все возможности PCRE, и её использование может быть ограничено. Также необходимо убедиться, что расширение mbstring включено.
Дополнительные примеры замены слов в PHP
Замена нескольких разных слов одновременно
Функция str_replace() принимает массивы в качестве параметров поиска и замены.
<?php
$text = 'Яблоко и груша. Яблоко вкусное.';
$search = ['Яблоко', 'груша'];
$replace = ['Апельсин', 'банан'];
$result = str_replace($search, $replace, $text);
echo $result;
?>
Апельсин и банан. Апельсин вкусное.
Замена только первого вхождения слова
Для замены первого вхождения можно использовать preg_replace() с ограничением на количество замен (четвёртый параметр).
<?php
$text = 'Раз, два, три. Раз, два.';
$result = preg_replace('/Раз/', 'Один', $text, 1); // заменить только 1 раз
echo $result;
?>
Один, два, три. Раз, два.
Замена с сохранением регистра (использование preg_replace_callback)
Чтобы заменить слово, но сохранить его оригинальный регистр, применяется обратный вызов.
<?php
$text = 'Кот и котёнок. КОТ.';
$result = preg_replace_callback('/\bкот\b/ui', function($matches) {
$replacement = 'собака';
// Сохраняем регистр первого символа
if (ctype_upper($matches[0][0])) {
$replacement = ucfirst($replacement);
}
return $replacement;
}, $text);
echo $result;
?>
Собака и котёнок. СОБАКА.
Пояснение:
Обратите внимание, что 'котёнок' не был заменён, так как используется граница слова \b.
Замена слова по его позиции (с использованием mb_strpos и substr_replace)
Если необходимо заменить слово, позиция которого найдена предварительно, можно комбинировать функции.
<?php
$text = 'Изучаем PHP в 2025 году.';
$search = 'PHP';
$pos = mb_strpos($text, $search);
if ($pos !== false) {
$length = mb_strlen($search);
$text = mb_substr_replace($text, 'JavaScript', $pos, $length);
}
echo $text;
?>
Изучаем JavaScript в 2025 году.
Важно: mb_substr_replace() не является стандартной функцией PHP, её нужно реализовать самостоятельно или использовать аналоги из библиотек.
Замена с использованием strtr (транслитерация)
Функция strtr() выполняет замену символов или строк по заданному массиву пар. Она полезна для замены множества коротких фрагментов.
<?php
$text = 'Hello world!';
$trans = ['Hello' => 'Hi', 'world' => 'Earth'];
$result = strtr($text, $trans);
echo $result;
?>
Hi Earth!
Особенность: замены производятся последовательно, причём каждая замена не применяется повторно к результату предыдущих (в отличие от str_replace, где возможны цепные замены, если массив замен содержит пересечения).