- From: Michael A. Peters <mpeters@mac.com>
- Date: Mon, 15 Jun 2009 10:35:29 -0700
- To: Shane McCarron <shane@aptest.com>
- Cc: www-validator@w3.org
Shane McCarron wrote:
>
>
> Michael A. Peters wrote:
>>
>> Hardly means I'm clueless, simply means I need to adjust my code to
>> check the q value.
>>
>> I got the code snippet off of a Firefox developer blog. Guess he's
>> clueless too, as he didn't check the q value either.
>>
>> There's a difference between clueless and sloppy. Sloppy is probably a
>> better description for my bug.
>>
>> Browsers that don't know how to properly parse xhtml (IE IE8) seem to
>> prefer not to even send it as part of what they can handle. But no, I
>> haven't tested all browsers. The main 4 gui get pages they properly
>> render (all but IE getting xhtml), wget and links get pages they
>> properly render. But yes, I'll fix the bug.
> Feel free to share your fixed code so others can benefit - it is in
> everyone's interest to help ensure that XHTML documents are delivered
> using the proper media types.
>
This is what I came up with (php) - the functions actually do more than
is necessary, but give me a function for getting q value of anything in
the accept string.
Tested in Firefox and Opera and manual manipulation of a test string.
It can be done better, but I'm tired (just got back from vacation and
now they are paving my street).
function getQValue($string) {
$exp = explode(';',$string);
if (sizeof($exp) == 1) {
$q = 1;
} else {
$qarray = explode('=',$exp[1]);
if (isset($qarray[1])) {
$q = (0 + trim($qarray[1]));
}
}
if (! isset($q)) {
$q=0;
}
$return[] = trim($exp[0]);
$return[] = $q;
return $return;
}
function getAccept($string) {
$accept = explode(',',$string);
for ($i=0; $i<sizeof($accept); $i++) {
$httpAccept[] = getQValue($accept[$i]);
}
return $httpAccept;
}
$testString = "text/html, application/xml;q=0.9,
application/xhtml+xml;q=0, image/png, image/jpeg, image/gif,
image//x-xbitmap, */*;q=0.1";
if (! isset($usexml)) {
if (isset($_SERVER['HTTP_ACCEPT'])) {
$httpAccept = getAccept($_SERVER['HTTP_ACCEPT']);
//$httpAccept = getAccept($testString);
for ($i=0; $i<sizeof($httpAccept); $i++) {
if (strcmp($httpAccept[$i][0],"application/xhtml+xml") == 0) {
$q = $httpAccept[$i][1];
}
}
if (! isset($q)) {
$q = 0;
}
if ($q > 0) {
$usexml = 1;
} else {
$usexml = 0;
}
} else {
$usexml = 0;
}
} // end if $usexml not previously explicity set
///
Received on Monday, 15 June 2009 17:36:40 UTC