แต่ก่อนผมจะใช้
ตัวอย่าง Code
<?php*** คำอธิบาย
$iec = stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE');
$iever = substr($iec, 0,8);
if($iever=="MSIE 7.0" || $iever=="MSIE 8.0" || $iever=="MSIE 9.0"|| $iever=="MSIE 10.")
{
echo "This IE.";
}else{
echo "Other Broser.";
}
?>
คือ ขั้นแรก ผมจะตัด ข้อความที่อยู่ใน ตัวแปร $_SERVER['HTTP_USER_AGENT'] ออกมาเก็บไว้ที่ตัวแปร $iec โดยการเริ่มตัดตั้งแต่คำที่ว่า MSIE เป็นต้นไป หลังจากนั้นผมก็นำตัวแปรที่ชื่อ $iec มาตัดข้อความอีกรอบ โดยเริ่มตัดที่ตัวอักษรที่ 0 ถึงตัวอักษรที่ 8 (รวมช่องว่าง หรือ Space bar ด้วย) ไปเก็บไว้ในตัวแปร ที่ชื่อ $iever แล้วนำมาเทียบกับ if ว่ามีค่าหรือคำว่า "MSIE" ของเวอร์ชั่นใดบ้างตามตัวอย่าง ตาม Code ตัวอย่าง แต่ปัญหาของ Code ตัวอย่างด้านบน เมื่อ IE ออกเวอร์ชั่นใหม่คือ IE11(Windows 2008,Windows7,8,8.1 ขึ้นไป) ค่าที่เก็บในตัวแปร $_SERVER['HTTP_USER_AGENT'] จะไม่เหมือนกับ เวอร์ชั่น 6 -10 ดั่งตัวอย่าง เพราะฉะนั้นจึงทำให้เกิดปัญหาเกี่ยวกับการทำงานของ ระบบที่เราพัฒนา(ผมเองก็โดน เลยต้องหาวิธีแก้ไข) จาก google บ้าง และ http://stackoverflow.com/ ส่วนมาจะเป็นชาวต่างชาติเค้าแนะนำวิธีการต่างๆ นานา ผมก็เลยนำมาประยุกต์เอาแบบง่าย สุดเข้าใจได้ดี ตามตัวอย่าง(ตามประสาผมเองที่คิดได้เพียงเท่านี้)เลยครับ
*** คำอธิบาย
มีสอง Function ของ php ที่ผมนำมาใช้งานร่วมกันคือ
1.คือ Function "preg_match" คือ เปรียบเทีบคำในสตริงกับรูปแบบที่เรามี
2.คือ Function "strpos" คือ ค้นหาตำแหน่งแรกของคำในสตริง
ตัวอย่าง Code
<?php
$AA = preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']);
echo "AA=".$AA;
echo "<br>";
echo "HTTP_USER_AGENT = ".$_SERVER['HTTP_USER_AGENT'];
echo "<br>";
$BB = strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0');
echo "BB=".$BB;
echo "<br>";
echo "HTTP_USER_AGENT = ".$_SERVER['HTTP_USER_AGENT'];
?>
และเมื่อรันผ่าน Chrome จะได้ดังภาพ

จะเห็นได้ว่าถ้ารันบน IE11 ค่าของ
$AA = preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']);จะมีค่าเท่ากับ = 0 เพราะว่า IE11 ไม่ได้เก็บรายละเอียดข้อมูล Browser แบบเดิม
และ
$BB = strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0');จะมีค่าเท่ากับ = 36 เพราะว่า IE11 ไม่ได้เก็บรายละเอียดข้อมูล Browser แบบเดิมแต่จะมี "Trident/7.0; rv:11.0" เข้ามาแทน(ตามเพื่อนๆชาวต่างชาติบอกมา จาก http://stackoverflow.com/)
ส่วนถ้าเป็น Chrome จะมีค่า $AA = 0 และ $BB = ค่าว่าง
ดังนั้นผมเลยนำทั้งสอง Function มาทำการเปรียบเทียบ แบบ Boolean ตามตัวอย่าง
ตัวอย่าง Code
<?php*** คำอธิบายการเทียบค่าของ สอง Function เป็นแบบ Boolean คือมี true กับ false ตามตัวอย่างผม ขั้น ทั้งสอง Function ด้วย || (หรือ) นั่นคือหากการเทียบค่าในวง(preg_match) แรก และ (strpos)ที่สอง หรือ อันใดอันหนึ่ง ไม่เท่ากับค่าว่างแสดงว่าเป็น IE แค่นี้ก็เอาอยู่แล้ว ครับสำหรับการเทียบค่าว่า ใช้ Browser IE หรือไม่ คราวหน้าผมจะมาอธิบายการ แปลงค่า หาก Coding จาก Encode Windows874 ไปเป็น UTF-8 เพื่อรองรับการทำงานของ Ajax
if (preg_match('~MSIE|Internet Explorer~i', $_SERVER['HTTP_USER_AGENT']) || (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0') !== false)) {
echo "IE Browser";
}else{
echo "Other Browser";
}
?>
หวังว่าคงเป็นประโยชน์บ้างนะครับ สุพจน์ บัวเลิง

