因为某项目中,用到分页函数。所以要重构url部分。
所以先自己试着去写了一下,
后来查询了一下php提供的相关函数。
下面你就可以看到同样的工作,不同的差距了。
这一种是自己写的:
//获取当前文件名部分
$script_name_url = $_SERVER['SCRIPT_NAME'];
$filename = basename($script_name_url);// page.php
//重构URL及参数部分
$reset_url = '';
$url = $_SERVER['REQUEST_URI'];// /review/php/day16_project_bbs/page.php?page=14&id=13
$url_array = explode('/',$url); //Array
$url_argument = end($url_array);// page.php?page=14&id=13
$url_argument = parse_url($url_argument);// array(2) { ["path"]=> string(8) "page.php" ["query"]=> string(12) "id=13&page=1" }
//判断参数部分是否存在
if(isset($url_argument['query'])){
$query =$url_argument['query'];
if(strpos($query,$page) === false){
$reset_url = $filename.'?'.$query."&{$page}=";//page.php?id=1&onset=1&page=
}else{
// 情况1:page.php?page=1&id=13
// page参数在前
$pattern = "/{$page}=\d+&+/";
// 情况2:page.php?id=13&page=1
// page参数在后
$pattern2 = "/{$page}=\d+/";
if(preg_match($pattern,$query,$sub_url)){//匹配到page=1&
$sub_str_url = $sub_url[0];
$query = preg_replace($pattern,"",$query);
$query .= "&{$page}=";
$reset_url = $filename.'?'.$query;
}
if(preg_match($pattern2,$query)){//匹配到page=1
$query = preg_replace($pattern2,"{$page}=",$query);
$reset_url = $filename.'?'.$query;
}
}
}else{
$reset_url = $filename."?{$page}=";//page.php?page=
}
这一种是根据php提供的相关函数来写的:
<?php
// 重构url
$reset_url = '';//用于重构url的初始化变量
$url = $_SERVER['REQUEST_URI'];// /review/php/day16_project_bbs/page.php?page=1&id=13
$url_arr = parse_url($url); // Array
$url_path = $url_arr['path'];// /review/php/day16_project_bbs/page.php
//重构$_GET值
if(!empty($url_arr['query'])){
$url_query = $url_arr['query'];// page=1&id=13
parse_str($url_query,$query_arr);//array(2) { ["page"]=> string(1) "1" ["id"]=> string(2) "13" }
unset($query_arr[$page]);
// 判断$_GET是否还有其他值的存在
if(empty($query_arr)){
$reset_url = "{$url_path}?{$page}=";
}else{
$url_args = http_build_query($query_arr);
$reset_url = "{$url_path}?{$url_args}&{$page}=";
}
}else{
$reset_url = "{$url_path}?{$page}=";
}
?>