[PHP] Check browser ondersteuning transparante PNG's

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hallo,

Ik heb een stukje php code geschreven die aan de hand van de HTTP_USER_AGENT variabele bekijkt of de browser transparante png's aan kan. Het zoekt naar Opera vanaf versie 3.51, Internet Explorer vanaf 7.0, Safari en Mozilla. Het script heeft niet echt verdere toelichting nodig denk ik.

Voor zover ik kan testen werkt dit (getest met Opera 7.xx en IE6).

Kunnen jullie hier zo aan zien of dit ook altijd werkt? (ik ben geen regular expression koning...) en of er nog verbeteringen aan mogelijk zijn?


PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php

$opera = (eregi('Opera[ \/]([0-9\.]+)',$_SERVER['HTTP_USER_AGENT'],$regs) && $regs[1] > 3.51) ? true : false;

$msie = (eregi('MSIE[ \/]([0-9\.]+)',$_SERVER['HTTP_USER_AGENT'],$regs) && $regs[1] >= 7) ? true : false;

$safari = (eregi('(konqueror|safari)',$_SERVER['HTTP_USER_AGENT'])) ? true : false;

$mozilla = (eregi('Mozilla[ \/]([0-9\.]+)',$_SERVER['HTTP_USER_AGENT'],$regs) && $regs[1] >= 5) ? true : false;

$png_support = ($opera | $msie | $safari | $mozilla) ? true : false;

if ($png_support):
?>
Congratulations, your browser supports full alpha PNG images
<? else: ?>
I'm sorry, no full alpha PNG support for you
<? endif; ?>

Acties:
  • 0 Henk 'm!

  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 22-07-2024
het ziet er goed uit, maareuh.. waarom test je het niet gewoon zelf met een aantal browers (of laat ons het doen?)
het werkt pas als het in de praktijk werkt zeg ik altijd ;)
hier staat een slome host, met je scriptje.
en hij werkt hier met FF 1.07 (true)
en ook met IE 6 (false)

trouwens welkom op got. Ik zie dat dit account speciaal voor deze vraag gemaakt is. Ik hoop echter dat je ook gaat posten in andere topics, want je code ziet er netjes uit :)

[ Voor 55% gewijzigd door BasieP op 01-11-2005 23:22 ]

This message was sent on 100% recyclable electrons.


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

De koek gaat natuurlijk niet op als je zelf je User_Agent kan invullen he :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Test ik het met mijn eigen geproggelde browser met perfecte png-support zegt 'ie dat hij het niet aankan ;(

userAgent: 'FooBrowser version 1.0'

kortom: userAgent strings zijn onbetrouwbaar en daarnaast ook onuitputtelijk. Verder is het redelijk nutteloos om op antieke browsers te testen en is dus enkel een check op IE noodzakelijk (en wie zegt dat de implementatie in IE7 bugloos zal zijn? ;) )
Vraag is ook wat je ermee wilt doen. In de meest voorkomende gevallen zijn er wel workarounds voor IE (clientside), en anders ziet je design er iets anders uit in IE - no big deal, het blijft immers een verouderde browser en zolang de content maar accessible blijft is dat maar een klein manco.

Algemeen wordt het als not-done beschouwd om een client op basis van de userAgent string alternatieve content voor te schotelen. Ga liever uit van de kleinst gemene deler, of gebruik graceful degradation technieken.

Overigens wel eens gekeken naar get_browser? (hoewel dat vrij traag is)

[ Voor 21% gewijzigd door crisp op 01-11-2005 23:54 ]

Intentionally left blank


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik wil het script gebruiken zodat mijn png's met transparantie er ook goed uit zien. Ik had het eerst geprobeerd door te detecteren of de browser msie was en er dan een 1x1 px transparant plaatje van te maken met de volgende css code erbij:

code:
1
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='plaatje.png', sizingMethod='scale');


Het detectiescript zag daarvoor er zo uit:
PHP:
1
2
$msie='/msie\s(5\.[5-9]|[6-9]\.[0-9]*).*(win)/i';
$pngfix = (!isset($_SERVER['HTTP_USER_AGENT']) || !preg_match($msie,$_SERVER['HTTP_USER_AGENT']) || preg_match('/opera/i',$_SERVER['HTTP_USER_AGENT'])) ? false : true;


Dit werkte prima bij mij thuis alleen kwam ik er achter dat dit niet altijd werkt; op de TU bijvoorbeeld niet. Daar krijg je alleen de transparante plaatjes (niks dus).

Dus had ik bedacht om dan te detecteren welke browser het wel aan zou kunnen en om vervolgens deze een png te geven en de rest een gif. Zie daarvoor de code in de openingspost.

Wat is volgens jullie de beste manier om dit probleem op te lossen? Gewoon alleen gif's gebruiken ookal wordt dat lelijker?

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Dat filter kan je ook met JS toepassen op je plaatjes, hoef je iig serverside geen truuken uit te halen.
Verder biedt IE mogelijkheden om alleen voor IE CSS toe te passen (conditional comments) of JS uit te voeren (conditional compilation)

Alleen gif gebruiken is meer een 'kleinst gemene deler'-oplossing ;)

Intentionally left blank


Acties:
  • 0 Henk 'm!

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 22:34
Verwijderd schreef op woensdag 02 november 2005 @ 12:56:Wat is volgens jullie de beste manier om dit probleem op te lossen? Gewoon alleen gif's gebruiken ookal wordt dat lelijker?
Afaik is IE de enige (relevante) browser zonder pngsupport. Voor deze browser kun je vrij gemakkelijk een alternatieve stylesheet opgeven met gif's ipv png's. Kun je gelijk redelijk clean om de CSS bugs/non-standard features heenwerken.

Regeren is vooruitschuiven

Pagina: 1