封裝通用的 redirect() 函數,實現延遲跳轉、友好提示、自定義模板,提升用戶體驗並統一項目風格。
<?php
/**
* 頁面跳轉函數
* @param int|string $ms 延遲秒數
* @param string $url 目標 URL
* @param string $text 提示信息
*/
function redirect($ms = 3, $url = '', $text = '') {
// 設置默認值
$ms = (int)$ms > 0 ? (int)$ms : 3;
$url = $url ?: '/';
$text = $text ?: '頁面正在跳轉,請稍候...';
// 輸出 HTML 模板
echo <<<EOT
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="{$ms};URL={$url}">
<meta charset="utf-8">
<title>頁面跳轉提示</title>
<style>
body {font-family: Microsoft YaHei, sans-serif; text-align: center; padding: 50px;}
.msg-box {max-width: 500px; margin: 0 auto; padding: 20px; border: 1px solid #ddd; border-radius: 4px;}
.btn {display: inline-block; margin-top: 15px; padding: 8px 20px; background: #007bff; color: #fff; text-decoration: none; border-radius: 3px;}
</style>
</head>
<body>
<div class="msg-box">
<h3>頁面操作提示</h3>
<p>{$text}</p>
<p><a href="{$url}" class="btn">{$ms} 秒後自動跳轉,點此立即前往</a></p>
</div>
</body>
</html>
EOT;
exit; // 關鍵:阻止後續代碼執行
}
// 基本用法
redirect(2, 'adduser.php', '增加用戶成功!稍後返回列表頁...');
// 成功提示跳轉
redirect(3, '/admin/users', '數據保存成功!');
// 錯誤提示返回
redirect(5, 'javascript:history.back()', '權限不足,即將返回上一頁...');
function redirect($ms = 3, $url = '', $text = '', $ajax = false) {
if ($ajax || (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
&& $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest')) {
// AJAX 請求返回 JSON
header('Content-Type: application/json');
echo json_encode([
'code' => 200,
'msg' => $text,
'url' => $url,
'wait' => $ms
]);
exit;
}
// ... 普通 HTML 跳轉邏輯
}
$url 應過濾驗證,防止開放重定向漏洞替代方案:現代框架通常使用
header('Location: ...')立即跳轉(302),配合 Session Flash 數據傳遞提示信息,體驗更流暢。