Просто измените:
$url = urldecode($_SERVER['REQUEST_URI']);
на
$url = $_SERVER['REQUEST_URI'];
Вы в основном двойное декодирование, так как parse_url
также будет декодировать его.
Стоит отметитьчто PHP уже сделал это для вас, так что на самом деле нет причины разбирать ваш собственный URL.$_GET['qry']
будет содержать 'm & l'
Если вы делаете это для нескольких переменных запроса, вам нужно будет запустить encodeURIComponent
отдельно для каждой.
Пример:
window.location.href = "search.php?qry=" + encodeURIComponent("m & l") + "&subcat="+encodeURIComponent("hello & there");
Вы явно говорите, что в конце концов закодируйте &.