php獲取網址url並替換參數或網址的方法

來源:互聯網
上載者:User
關鍵字 網路程式設計 PHP教程

代碼如下:
獲得當前的腳本網址
function GetCurUrl()
{
if(!empty($_SERVER["REQUEST_URI"]))
{
$scriptName = $_SERVER["REQUEST_URI"];
$nowurl = $scriptName;
}
else
{
$scriptName = $_SERVER["PHP_SELF"];
if(empty($_SERVER["QUERY_STRING"]))
{
$nowurl = $scriptName;
}
else
{
$nowurl = $scriptName."?". $_SERVER["QUERY_STRING"];
}
}
return $nowurl;
}

另一個是PHP替換網址中query部分的某變數的值比如 ,我們要設$url中的key=321;
其實有幾種情況:
$url='www.jzread.com/a.php教程?key=330′;
或$url='www.jzread.com/a.php;
或$url='www.jzread.com/a.php?cat=2′;
等等。 雖然情況很多,但PHP處理起來非常簡單,如下:
複製代碼 代碼如下:
/* 將URL中的某參數設為某值*/ //【這一段就挺好啊】
function url_set_value($url,$key,$value)
{
$a=explode('?',$url);
$url_f=$a[0];
$query=$a[1];
parse_str($query,$arr);
$arr[$key]=$value;
return $url_f.'?'. HTTP_build_query($arr);
}

不過我的替換是這樣寫的。。 當然也很爛 。。

複製代碼 代碼如下:
<?php
/**
*使用常式:可用於分頁類或頁面中的替換等
$url = "add_jd.php?pid=4&tb=gm_jd&page=1";
echo( "原始的URL:" . $url );
echo( '<br/>' );
echo( "字串參數:" . url::replace( $url , "pid=10,page=2") );
echo( '<br/>' );
echo( "陣列型參數:" . url::replace( $url , array('pid'=>10,'page'=>5)) );
//echo( urlReplace( $url , array('pid'=>10,'page'=>5)) );
*/
/**
* url replace
* @param string $url 需要替換的URL字串,一般為aaa.php?abc=def,也可以帶上路徑,象HTTP://xxx.com/abc/d ef.php?aa=bb
* @param mixed $options 需要替換的變數,可以是字串或陣列,如果是字串,格式為"aa=bb,cc=dd",有多個,用","隔開
* @return string $url 替換後的URL
*/
class url
{
static function replace ( $url , $options)
{
$options = self::optIni t( $options );
$Query = parse_url( $url , PHP_URL_QUERY );
if($Query){
parse_str( $Query , $GET );
if ( $GET ){
//foreach ( $GET as $_k => $_v ){
// //if( array_key_exists( $_k , $options)){
// $GET[$_k] = $options[$_k];
// //}
//}
$GET = array_merge($GET,$options);
}
return str_replace( $Query , HTTP_build_query( $GET ), $url );
}
if( !$Query && $options ){
return $url . "?" . HTTP_build_query($options);
}
return $url;
}
static private function optInit ( $options )
{
if( is_string( $options )){
$optlists = Power::N ormalize( $options );
foreach( $optlists as $val){
list($tmpKey,$tmpVal) = Power::Normalize( $val , "=");
$opts[$tmpKey] = $tmpVal;
}
}else{
$opts = $options;
}
//unset( $options );
return $opts;
}

雖然考慮了一些東西,但也僅僅是個很一般的解決方法

以下是一些補充資料:
例: 我需要 獲取當前的 的URL 位址
$url_this = "HTTP://".$_SERVER ['HTTP_HOST'].$_SERVER['PHP_SELF'];
echo $url_this;

則顯示 : HTTP://localhost/lu.php

伺服器變數:$_SERVER
注: 在 PHP 4.1.0 及以後版本使用。 之前的版本,使用 $HTTP_SERVER_VARS。

$_SERVER 是一個包含諸如頭部(headers)、路徑(paths)和腳本位置(script locations)的陣列。 陣列的實體由 web 伺服器創建。 不能保證所有的伺服器都能產生所有的資訊;伺服器可能忽略了一些資訊,或者產生了一些未在下面列出的新的資訊。 這意味著,大量的這些變數在 CGI 1.1 specification 中說明,所以您應該仔細研究它。

這是一個「superglobal」,或者可以描述為自動全域變數。 這只不過意味這它在所有的腳本中都有效。 在函數或方法中您不需要使用 global $_SERVER; 訪問它,就如同使用 $HTTP_SERVER_VARS 一樣。

$HTTP_SERVER_VARS 包含著同樣的資訊,但是不是一個自動全域變數。 (注意: $HTTP_SERVER_VARS 和 $_SERVER 是不同的變數,PHP 處理它們的方式不同。 )

如果設置了 register_globals 指令,這些變數也在所有腳本中可用;也就是,分離了 $_SERVER 和 $HTTP_SERVER_VARS 陣列。 相關資訊,請參閱安全的相關章節 使用 Register Globals。 這些單獨的全域變數不是自動全域變數。

您或許會發現下面列出的某些 $_SERVER 元素並不可用。 注意,如果以命令列方式運行 PHP,下面列出的元素幾乎沒有有效的(或是沒有任何實際意義的)。


「PHP_SELF」
當前正在執行腳本的檔案名,與 document root相關。 舉例來說,在URL位址為 HTTP://example.com/test.php/foo.bar 的腳本中使用 $_SERVER['PHP_SELF'] 將會得到 /test.php/foo.bar 這個結果。

如果 PHP 以命令列方式運行,該變數無效。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.