Как работает в данном случае str_replace php?

262
21 июля 2022, 14:00

Как то давно я делал многоязычность c помощью php. И когда очередь дошла до кнопок переключалок языка, мне посоветовали следующий код:

<?php
 $url = $_SERVER['REQUEST_URI'];
 $url .= (strpos($url, '?') === false ? '?' : '&');
?>
<a href="<?=$url . 'lang=en'?>"><img class="lang" src="images/langen.png"></a>
<a href="<?=$url . 'lang=ru'?>"><img class="lang r" src="images/langrus.png"></a>

Вроде все работало, но визуально было некрасиво. Если бы мы переключали на одной странице языки несколько раз, то субдомены (или как оно называется) накладывались бы бесконечно друг на друга.

mysite.com/index.php?lang=ru&lang=en&lang=ru&lang=en&lang=ru

И тогда я начал искать, то как не добавить новый lang, а заменить и нашел функцию str_replace('','','').

<?php
 $url = $_SERVER['REQUEST_URI'];
 $url = str_replace('','','');
?>
<a href="<?=$url . '?lang=en'?>"><img class="lang" src="images/langen.png"></a>
<a href="<?=$url . '?lang=ru'?>"><img class="lang r" src="images/langrus.png"></a>

Я оставил все ее значения пустыми, но она работает, один lang заменяется на другой, а не накладывается. И у меня возник вопрос, как так она работает или это случайность? Как я понял, она просто стирает предыдущий элемент, но в полях ничего не указано, как она поняла, что нужно убрать?

А так же какие альтернативы решения данного случая?

Заранее спасибо!

Answer 1

Как отметил @vp_arth эта функция срабатывает, как обычная пустая строка $url = '';. Поэксперементировав, оказалось что весь cкрипт вообще не нужен:

<?php
 $url = $_SERVER['REQUEST_URI'];
 $url = str_replace('','','');
?>

Его можно удалить, но нужно отредактировать ссылки и убрать лишнее и все будет работать:

<a href="?lang=en"><img class="lang" src="images/langen.png"></a>
<a href="?lang=ru"><img class="lang" src="images/langrus.png"></a>
READ ALSO
Вывод структуру(дерево) категорий

Вывод структуру(дерево) категорий

Нужно вывести дерево категорий, в бд таблица выглядит так:

222
Вывод спецсимволов MySQLi

Вывод спецсимволов MySQLi

Есть MySQLi база прикрученная к игровому серверуВ базу записываются рекорды игроков, никнейм и время за которое игрок прошел карту

239
Как работают аттрибуты в PHP 8?

Как работают аттрибуты в PHP 8?

В новой версии PHP(PHP 8) появилась возможность указывать аттрибуты

233
Привязка button к правому краю

Привязка button к правому краю

Суть вопросаЕсть у меня ListBox, который я задаю вот так:

316