Эту проблему можно решить с помощью другой системы кодирования, специфичной для вашей ситуации:
function encode($string)
{
$result = str_replace("|","||",$string);
return str_replace("&","|20",$result);
}
function decode($string)
{
$result = str_replace("|20","&",$string);
return str_replace("||","|",$result);
}
Это в основном создаст отдельную экранирующую систему, используя '|' персонаж. Этот символ может быть чем угодно, что вы обычно не используете и не является разделителем полей.
Здесь Apache не будет преобразовывать URL-адрес в нечто иное, что приведет к аннулированию конверсии. Также браузеры не преобразуют его.
Имейте в виду, что вы бы decode($_GET['alias'])
и encode()
указали URL-адрес, который нажимает пользователь, или сценарий.