Как то давно я делал многоязычность 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>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть MySQLi база прикрученная к игровому серверуВ базу записываются рекорды игроков, никнейм и время за которое игрок прошел карту
В новой версии PHP(PHP 8) появилась возможность указывать аттрибуты