Use a simple server-side script to determine browser type. Here's what a simple server-side browser sniffer looks like in Java ServerPages (JSP):<%@ page import="java.util.StringTokenizer,java.util.Vector" %><% String browser = request.getHeader("User-Agent"); StringTokenizer tokenizer = new StringTokenizer(browser, " "); Vector userAgent = new Vector(); boolean containsOpera = false; boolean containsKonqueror = false; boolean containsFirefox = false; boolean containsIE = false; while (tokenizer.hasMoreTokens()) { userAgent.add(tokenizer.nextToken()); } for (int i = 0; i < (userAgent.size()); i++) { if ((("" + userAgent.get(i)).length() >= 5) && ((("" + userAgent.get(i)).substring(0, 5)).equalsIgnoreCase("opera"))) { containsOpera = true; } if ((("" + userAgent.get(i)).length() >= 9) && ((("" + userAgent.get(i)).substring(0, 9)).equalsIgnoreCase("konqueror"))) { containsKonqueror = true; } else if (("" + userAgent.get(i)).equalsIgnoreCase("msie")) { containsIE = true; } else if ((("" + userAgent.get(i)).length() >= 7) && ((("" + userAgent.get(i)).substring(0, 7)).equalsIgnoreCase("firefox"))) { containsFirefox = true; } } if (containsOpera && !(containsFirefox) && !(containsKonqueror)) {%><%@ include file="opera.txt" %><% } else if (containsKonqueror) {%><%@ include file="konqueror.txt" %><% } else if (containsFirefox) {%><%@ include file="firefox.txt" %><% } else if (containsIE) {%><%@ include file="ie.txt" %><% } else if (!(containsOpera) && !(containsKonqueror) && !(containsFirefox) && !(containsIE)) {%><%@ include file="other.txt" %><% }%>
As you can see, it's fairly simple (at least in Java) to determine what browser someone is using, and then return the proper content. If you want to see it in action, the script is running here. The page is for customizations to the Opera browser (still a bit of a work in progress). I made it to give an offensive message if you are not using Opera when you view the page. It will only load the main content if it thinks you are using Opera.Say that you want to set a special content type based on whether the user is viewing the page in IE, or another browser. That would go something like this:
<%@ page import="java.util.StringTokenizer,java.util.Vector" %><% String browser = request.getHeader("User-Agent"); boolean containsOpera = false; boolean containsIE = false; StringTokenizer tokenizer = new StringTokenizer(browser, " "); Vector userAgent = new Vector(); while (tokenizer.hasMoreTokens()) { userAgent.add(tokenizer.nextToken()); } for (int i = 0; i < (userAgent.size()); i++) { if ((("" + userAgent.get(i)).length() >= 5) && ((("" + userAgent.get(i)).substring(0, 5)).equalsIgnoreCase("opera"))) { containsOpera = true; } else if (("" + userAgent.get(i)).equalsIgnoreCase("msie")) { containsIE = true; } } if (containsOpera) { response.setContentType("application/xhtml+xml"); //Since Opera can send a user-agent string almost identical to MSIE6, it's best to sniff for it first. } else if (containsIE) { response.setContentType("text/html"); } else if (!(containsOpera) && !(containsIE)) { response.setContentType("application/xhtml+xml"); }%>
To see that script in action, just navigate here. I'm sure it's just as simple to do that in PHP as well.