如何解码 URL 中的 &,以使 header() 函数正常工作(urldecode 无效)

15

我有以下的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

我该怎么办?


1
如果上面不是打错了:应该是 header("Location: $url") - 注意冒号 : - Marc B
@Marc B:谢谢,这只是打字错误,不在我的脚本中。我刚刚已经修复了它。 - ProgrammerGirl
4个回答

33

使用htmlspecialchars_decode函数尝试。

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

2
你推荐的 htmlspecialchars_decode 和其他人推荐的 html_entity_decode 有什么区别?我应该使用哪一个? - ProgrammerGirl
1
@程序员 html_entity_decode 用于重量级实体解码,例如将 ← 转换为 htmlspecialchars_decode 仅用于取消转义的 HTML,它仅解码了必要的字符以转义 HTML。在我看来,htmlspecialchars_decode 在语义上更加正确。 - Esailija
完美解决。我遇到了一个奇怪的header("location:")问题,有时候我看到&被转换成& ... 使用$ref = htmlspecialchars_decode($ref);清理了变量并且修复了。谢谢! - CA3LE

6

5

4

I'd try this:

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

这段话摘自http://php.net/manual/en/function.html-entity-decode.php

我建议你这样做是因为你的$url并不是经过URL编码的,而是HTML编码的,其中HTML特殊字符被替换为相应的HTML实体。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接