Как декодировать & из 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 ответов


попробовать htmlspecialchars_decode

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

& не закодирован URL (он же процент-кодирование), но является 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