Làm cách nào để có tên trình duyệt bằng PHP? Tôi nghĩ điều này sẽ đơn giản? Tất cả những gì tôi cần làm là phân biệt giữa IE và Firefox.PHP: lấy tên trình duyệt
Trả lời
if (strpos($_SERVER['HTTP_USER_AGENT'], '(compatible; MSIE ')!==FALSE) {
...ie specific...
}
Nhưng! Không!
Hiếm khi có lý do chính đáng để đánh hơi tác nhân người dùng ở phía máy chủ. Nó mang đến một loạt các vấn đề, bao gồm:
trình duyệt và sử dụng các đại lý khác mà nói dối về việc họ là ai, hoặc dải tiêu đề user-agent hoàn toàn, hay nói chung là làm cho nó khó có thể phân biệt những gì các trình duyệt thực sự là từ văn bản tiêu đề. Ví dụ, quy tắc trên cũng sẽ phát hiện Opera khi trình duyệt giả mạo IE và IEMobile (Windows Mobile), mà bạn có thể hoặc không muốn vì nó là một trình duyệt rất khác với IE trên máy tính để bàn.
nếu bạn phân biệt đối tác người dùng ở phía máy chủ, bạn phải trả lại tiêu đề
Vary: User-Agent
trong phản hồi, nếu không proxy có thể lưu lại phiên bản của trang và trả lại cho các trình duyệt khác không khớp. Tuy nhiên, bao gồm cả tiêu đề này có tác dụng phụ của rối tung lên bộ nhớ đệm trong IE.
Tùy thuộc vào những gì nó là bạn đang cố gắng để đạt được, đó là hầu như luôn luôn là một cách tốt hơn xử lý những khác biệt giữa IE và các trình duyệt khác tại phía khách hàng, sử dụng CSS hacks, JScript hoặc conditional comments. Mục đích thực sự của việc cố gắng phát hiện IE trong trường hợp của bạn là gì?
Chính xác. Nếu bạn cURL với; 'CURLOPT_USERAGENT ('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.17 (KHTML, như Gecko) Phiên bản/6.0.2 Safari/536.26.17');' và poof nó bị giả mạo :) –
$ _SERVER [ 'HTTP_USER_AGENT']
<?php
var_dump($_SERVER['HTTP_USER_AGENT']);
var_dump(get_browser(null, true));
?>
Prints:
Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3
Array
(
[browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
[browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
[parent] => Firefox 0.9
[platform] => WinXP
[browser] => Firefox
[version] => 0.9
[majorver] => 0
[minorver] => 9
[cssversion] => 2
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[backgroundsounds] =>
[vbscript] =>
[javascript] => 1
[javaapplets] => 1
[activexcontrols] =>
[cdf] =>
[aol] =>
[beta] => 1
[win16] =>
[crawler] =>
[stripper] =>
[wap] =>
[netclr] =>
)
1) dò chính xác: BrowserDetection.php (Examples)
2) nguyên thủy chức năng:
function get_user_browser()
{
$u_agent = $_SERVER['HTTP_USER_AGENT']; $ub = '';
if(preg_match('/MSIE/i',$u_agent)) { $ub = "ie"; }
elseif(preg_match('/Firefox/i',$u_agent)) { $ub = "firefox"; }
elseif(preg_match('/Safari/i',$u_agent)) { $ub = "safari"; }
elseif(preg_match('/Chrome/i',$u_agent)) { $ub = "chrome"; }
elseif(preg_match('/Flock/i',$u_agent)) { $ub = "flock"; }
elseif(preg_match('/Opera/i',$u_agent)) { $ub = "opera"; }
return $ub;
}
nhờ làm việc hoàn hảo ! –
Hãy thử mã này ...
<?php
function getBrowser()
{
$u_agent = $_SERVER['HTTP_USER_AGENT'];
$bname = 'Unknown';
$platform = 'Unknown';
$version= "";
//First get the platform?
if (preg_match('/linux/i', $u_agent)) {
$platform = 'linux';
}
elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
$platform = 'mac';
}
elseif (preg_match('/windows|win32/i', $u_agent)) {
$platform = 'windows';
}
// Next get the name of the useragent yes seperately and for good reason
if(preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
{
$bname = 'Internet Explorer';
$ub = "MSIE";
}
elseif(preg_match('/Firefox/i',$u_agent))
{
$bname = 'Mozilla Firefox';
$ub = "Firefox";
}
elseif(preg_match('/Chrome/i',$u_agent))
{
$bname = 'Google Chrome';
$ub = "Chrome";
}
elseif(preg_match('/Safari/i',$u_agent))
{
$bname = 'Apple Safari';
$ub = "Safari";
}
elseif(preg_match('/Opera/i',$u_agent))
{
$bname = 'Opera';
$ub = "Opera";
}
elseif(preg_match('/Netscape/i',$u_agent))
{
$bname = 'Netscape';
$ub = "Netscape";
}
// finally get the correct version number
$known = array('Version', $ub, 'other');
$pattern = '#(?<browser>' . join('|', $known) .
')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
if (!preg_match_all($pattern, $u_agent, $matches)) {
// we have no matching number just continue
}
// see how many we have
$i = count($matches['browser']);
if ($i != 1) {
//we will have two since we are not using 'other' argument yet
//see if version is before or after the name
if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
$version= $matches['version'][0];
}
else {
$version= $matches['version'][1];
}
}
else {
$version= $matches['version'][0];
}
// check if we have a number
if ($version==null || $version=="") {$version="?";}
return array(
'userAgent' => $u_agent,
'name' => $bname,
'version' => $version,
'platform' => $platform,
'pattern' => $pattern
);
}
// now try it
$ua=getBrowser();
$yourbrowser= "Your browser: " . $ua['name'];
echo $yourbrowser;
?>
Output của Firefox
Mozilla Firefox
- 1. Lấy tiêu đề trình duyệt bằng Python
- 2. Lấy Tên Ngày trong PHP
- 3. Lấy tên hàm hiện tại trong PHP
- 4. Lấy tên chương trình Java
- 5. php mở file excel trong trình duyệt
- 6. Lấy tên nút gửi trong PHP
- 7. PHP - lấy tên màu từ rgb
- 8. Cách lấy tên quy trình trong C++
- 9. JavaScript: Trình duyệt "trình duyệt plugin" qua trình duyệt
- 10. Lấy URL hiện tại trong trình duyệt Android
- 11. JavaScript - lấy thông tin chi tiết về trình duyệt
- 12. lấy tên biến trong trình hiển thị trình gỡ lỗi
- 13. Tệp đầu ra PHP trên đĩa tới trình duyệt
- 14. Kiểm tra ngôn ngữ của trình duyệt bằng PHP?
- 15. Trình duyệt có PHP: gây nhầm lẫn đầu ra
- 16. Tệp PHP sẽ không cập nhật trong trình duyệt
- 17. Viết dòng nhị phân để trình duyệt sử dụng PHP
- 18. Mã PHP để dừng tập lệnh chạy từ trình duyệt
- 19. Dừng in thông báo lỗi php tới trình duyệt
- 20. Lỗi PHP không hiển thị trong trình duyệt
- 21. Cách lấy tên của lớp gọi điện thoại (bằng PHP)
- 22. Trình duyệt chéo Chọn các phần tử theo tên lớp
- 23. JavaScript - Cửa sổ trình duyệt tham chiếu theo tên?
- 24. Cạo một trang web để lấy tên và id của phần tử thông qua trình duyệt web C#
- 25. PHP: Cách chụp màn hình cửa sổ trình duyệt bằng php?
- 26. PHP: Cách lấy tất cả tên biến trong phương thức bài đăng php
- 27. PHP: lấy tất cả tên phương thức từ một đối tượng có tên "bla_"
- 28. Lấy tên quy trình từ pid hoặc xử lý
- 29. Làm cách nào để lấy tên chương trình trong Racket?
- 30. Cách lấy tên quy trình của ứng dụng?
Mặc dù hoàn toàn có thể nhận được giá trị (như được mô tả trong các câu trả lời bên dưới) cho trình duyệt, bạn nên lưu ý rằng giá trị này không nhất thiết phải chính xác. – dnagirl
** Bản sao của http://stackoverflow.com/questions/1895727/how-can-i-detect-the-browser-with-php-or-javascript/** –