Skip to content
Tháng Bảy 15, 2010 / anhhnt

Xác định và chuyển hướng người dùng di động duyệt web

Trong 1 lần giải quyết vấn đề duyệt web di động cho website http://buonmathuot.biz. Mình tình cờ phát hiện được kĩ thuật này, nhận thấy đây là 1 kỹ thuật đơn giản nhưng khá hữu dụng, nên đăng lên đây giới thiệu lại

Nguồn :http://nhanweb.com/2010/05/mobile-detect-thiet-bi-di-dong-duyet-web/

Thiết bị di động ngày càng phổ biến, Internet không còn là độc quyền của PC và các trình duyệt web trên PC nữa mà đã trở nên dễ dàng hơn bao giờ hết với các trình duyệt web di động. Bài viết này, NhanWeb chia sẻ với các bạn cách lập trình xác định thiết bị đầu cuối (thiết bị duyệt web) để tìm kiếm phiên bản thích hợp cho thiết bị này.

1 Vấn đề của các forum hiện nay là ngày càng nhiều người muốn theo dõi tin tức liên tục, ngay cả khi họ không ngồi trước máy tính. Các thiết bị di động ngày nay hỗ trợ đầy đủ HTML, WAP, các phương thức kết nối 3G, GPRS, wifi, nhưng  vấn đề là 1 số thiết bị có bộ nhớ hoặc màn hình quá nhỏ, không hỗ trợ trình bày 1 nội dung HTML quá lớn, hoặc browser không hỗ trợ ajax, javascript, khiến nội dung không thể hiện chính xác. Vì vậy, quản trị cần đưa ra 2 phiên bản cho website của mình, 1 phiên bản dành cho di động, và 1 phiên bản cho PC. Trang web của mình hiện có 2 phiên bản là :

http://mobi.buonmathuot.biz : dành cho di động

http://buonmathuot.biz : phiên bản thông thường cho pc

Tuy nhiên, cần phải phát hiện khi nào người dùng di động và dùng PC, đó là vấn đề chính của article này.

Đây là mã PHP cho ý tưởng trên:

<?
 
//****************************************************************************************
// Vui long khong xoa dong nay
// Xac dinh thiet bi di dong va PC
// Author: Nguyen Duy Nhan
// Website: wwww.nhanweb.com - www.vnwebmaster.com
// Email: contact@vnwebmaster.com
//****************************************************************************************/
 
 
//Configuration
global $userBrowser;
global $userAccept;
 
 
//Mang xac dinh cac thiet bi di dong
$mobiidentity = array('wapbrowser','up.browser','up/4','mib','cellphone','go.web',
                     'nokia','panasonic','wap','wml-browser','wml','samsung'
                     );
 
//Mang xac dinh trinh duyet web thong thuong
$pcidentity = array(
		'mozilla','gecko','opera','omniweb','msie','konqueror','safari',
		'netpositive' ,'lynx' ,'elinks' ,'links' ,'w3m' ,'webtv' ,'amaya' ,
		'dillo' ,'ibrowse' ,'icab' ,'crazy browser' ,'internet explorer' 
		);
 
$pspidentity= array('PlayStation Portable');
$iPhoneidentity= array('iphone');
 
 
$linkformobile = "http://mobi.buonmathuot.biz";
$linkforweb = "http://buonmathuot.biz";
 
// chuyen AGENT ve lower case
$userBrowser = strtolower($_SERVER['HTTP_USER_AGENT']); 
// chuyen HTTP_ACCEPT ve lower case
$userAccept= strtolower($_SERVER['HTTP_ACCEPT']);
 
 
if (stristr($userAccept,'wml')) {
	$driver = "WML";	
}else{
	//check cho thiet bi di dong thong thuong
	if(check_identity($userBrowser, $mobiidentity))
		$driver = "WML";
	elseif(check_identity($userBrowser, $pcidentity))
		$driver = "PC";
	elseif(check_identity($userBrowser, $pspidentity))
		$driver = "WML";// Co the define lai 1 gia tri khac de sau nay xu ly
	elseif(check_identity($userBrowser, $iPhoneidentity))
		$driver = "WML";// Co the define lai 1 gia tri khac de sau nay xu ly
	else //Khong tim thay thi mac dinh la thiet bi di dong luon ^_^
		$driver = "WML";
}
 
//Ok ! Sau khi xac dinh thiet bi xong roi thi redirect ve cho thich hop cua no
 
switch ($driver){
  case 'PC':
    header("Location: ".$linkforweb);
    exit;
  case 'WML':
    header("Location: ".$linkformobile);
  exit;
  }
 
 
function check_identity($userBrowser, $identity){
	foreach($identity as $value){
		if(stristr($userBrowser, $value)){
			//Tim thay browser
			return true;
		}
	}
	//Khong tim thay
	return false;
}
?>

Lý giải một tí

Trong đoạn code trên chúng ta sẽ dựa vào 2 giá trị được server trả về là HTTP_USER_AGENT và HTTP_ACCEPT để tìm hiểu browser mà người dùng duyệt web. Qua đó, xác định được các browser nào là browser giành cho di động cũng như loại browser của nó. Dựa vào đó, chuyển hướng đến trang thích hợp (hoặc bạn có thể làm gì cũng được sau khi xác định được loại thiết bị đúng không ?)

Trong đoạn code trên, mình check tổng cộng 4 loại thiết bị bao gồm Mobile, Computer, Play Station, Iphone. Nếu bạn không thích check cái nào thì bỏ bớt nếu thích.

Hàm check_identity() được sử dụng để tìm kiếm trong chuỗi $_SERVER[‘HTTP_USER_AGENT’] các giá trị được nói đến trong mảng từ khóa giúp xác định thiết bị. Nếu từ khóa tồn tại trong chuỗi này thì thiết bị được định dạng tương ứng là thiết bị thuộc loại đó. Mảng từ khóa này các bạn có thể bổ sung tùy ý.

Phần còn lại chắc không cần phải giải thích nữa


<?
 
//****************************************************************************************
// Vui long khong xoa dong nay
// Xac dinh thiet bi di dong va PC
// Author: Nguyen Duy Nhan
// Website: wwww.nhanweb.com - www.vnwebmaster.com
// Email: contact@vnwebmaster.com
//****************************************************************************************/
 
 
//Configuration
global $userBrowser;
global $userAccept;
 
 
//Mang xac dinh cac thiet bi di dong
$mobiidentity = array('wapbrowser','up.browser','up/4','mib','cellphone','go.web',
                     'nokia','panasonic','wap','wml-browser','wml','samsung'
                     );
 
//Mang xac dinh trinh duyet web thong thuong
$pcidentity = array(
		'mozilla','gecko','opera','omniweb','msie','konqueror','safari',
		'netpositive' ,'lynx' ,'elinks' ,'links' ,'w3m' ,'webtv' ,'amaya' ,
		'dillo' ,'ibrowse' ,'icab' ,'crazy browser' ,'internet explorer' 
		);
 
$pspidentity= array('PlayStation Portable');
$iPhoneidentity= array('iphone');
 
 
$linkformobile = "http://mobi.timviecnhanh.com";
$linkforweb = "http://timviecnhanh.com";
 
// chuyen AGENT ve lower case
$userBrowser = strtolower($_SERVER['HTTP_USER_AGENT']); 
// chuyen HTTP_ACCEPT ve lower case
$userAccept= strtolower($_SERVER['HTTP_ACCEPT']);
 
 
if (stristr($userAccept,'wml')) {
	$driver = "WML";	
}else{
	//check cho thiet bi di dong thong thuong
	if(check_identity($userBrowser, $mobiidentity))
		$driver = "WML";
	elseif(check_identity($userBrowser, $pcidentity))
		$driver = "PC";
	elseif(check_identity($userBrowser, $pspidentity))
		$driver = "WML";// Co the define lai 1 gia tri khac de sau nay xu ly
	elseif(check_identity($userBrowser, $iPhoneidentity))
		$driver = "WML";// Co the define lai 1 gia tri khac de sau nay xu ly
	else //Khong tim thay thi mac dinh la thiet bi di dong luon ^_^
		$driver = "WML";
}
 
//Ok ! Sau khi xac dinh thiet bi xong roi thi redirect ve cho thich hop cua no
 
switch ($driver){
  case 'PC':
    header("Location: ".$linkforweb);
    exit;
  case 'WML':
    header("Location: ".$linkformobile);
  exit;
  }
 
 
function check_identity($userBrowser, $identity){
	foreach($identity as $value){
		if(stristr($userBrowser, $value)){
			//Tim thay browser
			return true;
		}
	}
	//Khong tim thay
	return false;
}
?>
Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s

%d bloggers like this: