Функция 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()
предпочтительней.
Этот пример очень хорошо демонстрирует особенность работы функции:
$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 указывается конец строки) для избегания двойной замены.