Как декодировать & из URL, чтобы header () работал (urldecode не работает)


У меня есть следующий URL: $url = 'http://mysite.com/?p=welcome&x=1&y=2';

Мне нужно расшифровать его так, чтобы header("Location: $url"); действительно работал.

Однако, использование urldecode($url) не работает, потому что это не декодирование & -> & и поэтому браузер перенаправляется на http://mysite.com/?p=welcome&x=1&y=2, что не удается.

Мне нужно его расшифровать так, чтобы он выглядел так: http://mysite.com/?p=welcome&x=1&y=2

Как мне это сделать?

4 11

4 ответа:

Попробуйте с htmlspecialchars_decode

echo htmlspecialchars_decode('http://mysite.com/?p=welcome&x=1&y=2');
//"http://mysite.com/?p=welcome&x=1&y=2"

& не кодируется URL (aka percent-encoding), но является HTML-сущностью. URL-кодировка будет выглядеть как %26.

Использование html_entity_decode().

Я бы попробовал так:

$url = html_entity_decode($url);
header("Location: $url");

Взято из http://php.net/manual/en/function.html-entity-decode.php

Я бы сделал это, потому что ваш $url не закодирован url, а закодирован html, с html-специальными символами, замененными соответствующей HTML-сущностью.

& не кодируется url-адресом. Вам нужно использовать htmlspecialchars_decode() http://php.net/manual/en/function.htmlspecialchars-decode.php