我正在使用PHP爲表格創建分頁。 我使用下面的代碼來創建分頁鏈接刪除URL中的舊參數(PHP)
<a class='page-numbers' href='$href&pagenum=$i'>$i</a>
隨着$ HREF
$href = $_SERVER['REQUEST_URI'];
它運作良好,但是,它與地址欄打亂,每次添加新頁次參數。 因此,它變成pagenum = 1 & pagenum = 3 & pagenum = 4 ....
如何改善?
我正在使用PHP爲表格創建分頁。 我使用下面的代碼來創建分頁鏈接刪除URL中的舊參數(PHP)
<a class='page-numbers' href='$href&pagenum=$i'>$i</a>
隨着$ HREF
$href = $_SERVER['REQUEST_URI'];
它運作良好,但是,它與地址欄打亂,每次添加新頁次參數。 因此,它變成pagenum = 1 & pagenum = 3 & pagenum = 4 ....
如何改善?
這個怎麼樣?去和測試,以確保:)
<?php
$new_get = $_GET; // clone the GET array
$new_get['pagenum'] = $i; // change the relevant parameter
$new_get_string = http_build_query($new_get); // create the foo=bar&bar=baz string
?>
<a class="page-numbers" href="?<?php echo $new_get_string; ?>">
<?php echo $i ?>
</a>
另外,還要注意整個$href
位是不必要的。如果你用?
開始href
,瀏覽器將把查詢字符串應用到當前路徑。
我敢打賭你會循環,所以這裏有一個版本優化生成10,000頁的頁面鏈接。我的基準測試表明它在大量鏈接上的速度稍微快一點,因爲你只是在進行字符串連接而不是完整的HTTP查詢構建,但它可能不足以值得擔心。當有五個或六個GET參數時,這種差異才真正顯着,但是,如果存在,這種策略在我的機器上大約一半的時間內完成。
<?php
$pageless_get = $_GET; // clone the GET array
unset($pageless_get['pagenum']); // remove the pagenum parameter
$pageless_get_string = http_build_query($pageless_get); // create the foo=bar&bar=baz string
for($i = 0; $i < 10000; $i++):
// append the pagenum param to the query string
$page_param = "pagenum=$i";
if($pageless_get_string) {
$pageful_get_string = "$pageless_get_string&$page_param";
} else {
$pageful_get_string = $page_param;
}
?>
<a class="page-numbers" href="?<?php echo $pageful_get_string; ?>">
<?php echo $i ?>
</a>
<?php endfor ?>
$url = $_SERVER['REQUEST_URI'];
$urlparams = parse_url($url);
if(isset($urlparams['query']){
parse_str($urlparams['query'],$vars);
$vars['pagenum'] = $i;
$urlparams['query'] = http_build_query($vars);
} else {
$urlparams['query'] = 'pagenum='.$i;
}
$url = http_build_url($urlparams);
//http_build_url() is in PECL, you might need to manually rebuild the
//url by looping through it's components:
/*
$url=(isset($urlparams["scheme"])?$urlparams["scheme"]."://":"").
(isset($urlparams["user"])?$urlparams["user"]:"").
(isset($urlparams["pass"])? ":".$urlparams["pass"]:"").
(isset($urlparams["user"])?"@":"").
(isset($urlparams["host"])?$urlparams["host"]:"").
(isset($urlparams["port"])?":".$urlparams["port"]:"").
(isset($urlparams["path"])?$urlparams["path"]:"").
(isset($urlparams["query"])?"?".$urlparams["query"]:"").
(isset($urlparams["fragment"])?"#".$urlparams["fragment"]:"");
*/
'$ href'也可能是一個安全問題。 – alex 2010-09-15 01:12:55
@alex - 不是修辭:安全問題會是什麼?通過'http://example.com/index.php/">直接在身體上的東西像XSS? – Matchu 2010-09-15 01:21:07
是的,但我[想](http://www.alexanderdickson.com/blog/2010/03/form -security-submitting-forms-to-itself-in-php /)大多數/所有瀏覽器都會對網址中的壞字符進行編碼 – alex 2010-09-15 01:30:44