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