Справочники, инструменты, документация

PHP: Функция str_replace()

Функция `str_replace()` заменяет все совпадения в строке на указанную строку.

Функция str_replace() возвращает строку, полученную в результате замены. Вот её синтаксис:

str_replace(что менять, на что менять, исходная строка)

Функция чувствительна к регистру.

Вот простой пример работы функции str_replace():

$string_1 = "В следующем, 2017 году, мир встретится лицом к лицу с инопланетным разумом.";
$string_2 = str_replace( "2017", "2018", $string_1 );
echo $string_2;

Этот пример демонстрирует общий принцип работы функции str_replace(). Но в качестве первого и второго аргумента этой функции можно передать массивы. Давайте рассмотрим более сложный пример.

Вы наверно знаете, что на форумах есть BB-код, который нужно заменять на код HTML. Эту задачу может выполнять функция str_replace().

Вот как бы мы это делали, используя строки в качестве аргументов.

$txt = "Это [B]важный[/B] код.";
$txt_new = str_replace( "[B]", "<strong>", $txt );
$txt_new = str_replace( "[/B]", "</strong>", $txt_new );
echo "Исходная строка: \"$txt\".<br>";
echo "Новая строка: \"$txt_new\".";

В этом примере много кода, особенно когда нужно обработать более 10 пар тегов. Вот тут и используем массив:

$txt = "Это [B]важный[/B] код. Пожалуйста, [I]внимательно[/I] прочитайте его.";
$bb_code = array("[B]", "[/B]", "[I]", "[/I]");
$htm_code = array("<strong>", "</strong>", "<em>", "</em>");
$txt_new = str_replace($bb_code, $htm_code, $txt);
echo "Исходная строка: \"$txt\".<br>";
echo "Новая строка: \"$txt_new\".";

Если вместо массива для замены поставить строку, то все совпадения с элементами массива будут заменены на строку. Вот пример:

$txt = "Это [B]важный[/B] код. Пожалуйста, [I]внимательно[/I] прочитайте его.";
$bb_code = array("[B]", "[/B]", "[I]", "[/I]");
$htm_code = "[tag]";
$txt_new = str_replace($bb_code, $htm_code, $txt);
echo "Исходная строка: \"$txt\".<br>";
echo "Новая строка: \"$txt_new\".";

Если второй массив короче первого, то вместо недостающих элементов функцией str_replace() будет подставлена пустая строка.

$txt = "Это [B]важный[/B] код. Пожалуйста, [I]внимательно[/I] прочитайте его.";
$bb_code = array( "[B]", "[/B]", "[I]", "[/I]" );
$htm_code = array( "[tag]", "[/tag]" );
$txt_new = str_replace( $bb_code, $htm_code, $txt );
echo "Исходная строка: \"$txt\".<br>";
echo "Новая строка: \"$txt_new\".";

Если вам нужны сложные правила поиска/замены (например, регулярные выражения), то используйте функцию preg_replace(). Для простых сравнений строк использование функции str_replace() предпочтительней.

Трюки с str_replace()

Этот пример очень хорошо демонстрирует особенность работы функции:

$search = array( 'A', 'B', 'C', 'D', 'E' );
$replace = array( 'B', 'C', 'D', 'E', 'F' );
$subject = 'A';
echo str_replace($search, $replace, $subject); // F

Этот код вернёт символ F, так как будет заменяется A на B, затем B на C, и так далее до F.

Теперь рассмотрим пример правильного порядка замены последовательностей конца строки на тег <br>. Вы должны знать, что символы конца строки: \r\n, \n и \r (возврат каретки).

$str = "Строка 1\nСтрока 2\rСтрока 3\r\nСтрока 4\n";
$order = array("\r\n", "\n", "\r");
$replace = '<br>';
echo $newstr = str_replace($order, $replace, $str);

В массиве $order сначала стоят символы \r\n (так в Windows указывается конец строки) для избегания двойной замены.

На этой странице