请注意,$_SERVER["HTTP_REFERER"] 可能不包含包含在引用地址中的 GET 数据,具体取决于浏览器。因此,如果您依赖 GET 变量来生成页面,那么使用 HTTP_REFERER 将用户平稳地“弹回”他/她来自的页面并不是一个好主意。
请注意,$_SERVER["HTTP_REFERER"] 可能不包含包含在引用地址中的 GET 数据,具体取决于浏览器。因此,如果您依赖 GET 变量来生成页面,那么使用 HTTP_REFERER 将用户平稳地“弹回”他/她来自的页面并不是一个好主意。
还要注意,$HTTP_REFERER 中显示的 URL 并不总是用户点击以调用 PHP 脚本的网页的 URL。
这可能是您自己网站上的文档,其中包含一个 HTML 元素,其一个属性引用了该脚本。还要注意,当前页面片段 (#anchor) 可能会与 URL 一起传输,也可能不会,具体取决于浏览器。
示例
<FRAME src="your-page-script.php"8>
<IMAGE src="your-image-script.php">
在这种情况下,浏览器应该传输容器文档的 URL,但有些浏览器仍然坚持使用浏览器历史记录中的上一个文档,这会导致在用户返回到引用您脚本的文档时发送不同的 $HTTP_REFERER 值。如果您想确保发送实际的当前文档或历史记录中的上一个文档,请使用客户端 JavaScript 将其发送到您的脚本
<SCRIPT language="JavaScript"><!--
document.writeln('<FRAME src="your-page-script.php?js=1&ref=' +
document.location + '">');
--></SCRIPT><NOSCRIPT>
<FRAME src="your-page-script.php?js=0">
</NOSCRIPT>
然后检查页面脚本中 $js 的值,以便在远程用户代理不支持客户端脚本(例如大多数索引/扫描机器人、一些旧的或简化的浏览器,或用户禁用了 JavaScript 的浏览器)时生成适当的内容。
如果代码位于 FRAME 或 IFRAME 的源页面(例如 SRC="sourcepage.php")中,则以下方法不会在用户浏览器中显示 URL(如作者所述)。在这种情况下,将显示源页面的 URL。
$url = sprintf("%s%s%s","http://",$HTTP_HOST,$REQUEST_URI);
echo "$url";
预期结果:http://localhost/urltest/framedpage.php
实际结果:http://localhost/urltest/sourcepage.php
在表单中使用多选时,我遇到了一个小问题,即只接收选择框中的最后一个值。
我有一个名为 organization_id 的选择框,有两个值(92 和 93)。
要获取两个值,我必须使用以下代码
$temp_array = split("&", $_SERVER['QUERY_STRING']);
foreach($temp_array as $key=>$value){
if(substr($value, 0, 15) == "organization_id"){
$_GET['organizations'][] = substr($value, 15, strlen($value));
}
}
这将产生一个像这样的 $_GET 数组
(
[page] => idea_submission
[organization_id] => 93
[organizations] => Array
(
[0] => =92
[1] => =93
)
)
要检查 URL 是否有效,请尝试使用 fopen() 打开它。如果 fopen() 出现错误(返回 false),则 PHP 无法打开您请求的 URL。这通常是因为它无效...
/*
这可能是显而易见的,但对我来说很有帮助,因为我找到了它
如果我想将一个变量追加到 URL 并将其传递到同一个页面。(在本例中,我使用 action=email 在用户点击时包含电子邮件表单)我这样做
*/
// ...
<a href="<? echo $PHP_SELF,'?',$_SERVER['QUERY_STRING'],'&action=email' ?>">给我们发邮件</a>
// ...
/* 在页面的某个地方(在我的情况下,在底部)我有:*/
<? if ($action=='email') include('emailForm.htm'); ?>
关于上面的说明:关键是,使用 $_SERVER['QUERY_STRING'] 以及 $PHP_SELF,我们将传递已经追加的所有变量(因为它们可能需要用于数据库查询)
例如,给定以下 URL:http://www.your_domain/somepage.php?variable=1;
使用 $PHP_SELF",我们传递
[scheme]:(http://), [host]: www.your_domain/ 和 [path]: somepage.php
添加 $_SERVER['QUERY_STRING'],我们传递它,以及 [query]: variable=1
如果您想在全局错误页面(例如 404)上获取请求的文件名,只需使用以下代码...
// 获取完整的变量...
$page = $HTTP_SERVER_VARS["QUERY_STRING"];
// part[1] 是 URL...
// part[0] 是 HTTP 代码(404 等)。
if(strpos($page,";")>0) {
$pageParts = explode(";",$page);
$page = $pageParts[1];
}
// 只获取文件名...
$page = basename($page);