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

Как то давно я делал многоязычность 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 заменяется на другой, а не накладывается. И у меня возник вопрос, как так она работает или это случайность? Как я понял, она просто стирает предыдущий элемент, но в полях ничего не указано, как она поняла, что нужно убрать?

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

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


Ответы (1 шт):

Автор решения: Hi_TecH

Как отметил @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>
→ Ссылка