Mit einem PHP-Browsersniffer, der feststellt, ob man mit einem IE kleiner 7 angesurft kommt, kann man entscheiden, ob man nun einen einfachen Image-Tag möchte oder das aufwändige komplexe <span>-Tag um PNG mit Transparenz in den alten IEs darzustellen.


Die Streifen sind ein PNG mit Alpha-Transparenz und der Fisch ist ein Gif. Entsprechend unterschiedlich bindet die kleine Funtkion diese Grafiken in alten Microsoft Internet Explorer vor der Version 7 ein.
Die Quelltext-Ausgabe im MSIE<6 sieht für diese beiden Bilder wie folgt aus:
<p><spantitle="Streifen mit Transparenzverlauf"style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src= 'transparency-test.png',sizingMethod='scale');display: inline-block; width: 500px; height: 200px;"> </span></p> <p><img src="fish.gif" alt="Fisch" style="width: 220px; height: 81px;" /></p>In Zeile 3 ist im Quelltext kein Umbruch. Dieser ist nur aufgrund der besseren Lesbarkeit hier eingeführt.
Im PHP-Script selbst ist die Angelegenheit ist erst einmal die Funktion vorhanden ein simple angelegenheit: <?php _img('Bilddateipfad','ALT-Text'); ?>. Also noch bequemer als ein <img ... />-Tag.
<?php/*+ Scriptfunktion: Transparente PNG-Grafiken im MSIE <7 darstellen++ Hinweis zum Gebrauch:+ ==============================================+ statt <img src="..." alt="..." />+ nun <?php _img('Bilddateipfad','ALT-Text','Optionen', 'pngKeep'); ?>++ Unter Optionen sind Optionen wie Title Class Style Rel etc zu verstehen.+ Höhe und Breite müssen nicht angegeben werden, diese werden vom Skript eingefügt+ Gibt man Höhe und Breite an, so werden diese die von PHP ermittelten Maße überschreiben.+ pngKeep kann true oder 1 bzw. false oder 0 lauten und dient dazu nicht transparente+ PNGs auch im IE als Images und nicht als Hintergründe eines Spans einzugügen.++ Beispiel: <?php _img('images/mypic.png','My PNG','class="thickbox" rel="series" title="My PNG No X"', 'true'); ?>+ oder: <?php _img('images/mypic.png','My PNG','',''); ?>+ oder: <?php _img('images/mypic.gif','My GIF','title="It\'s a Gif"',''); ?>+*/function _img($imgFile, $imgAlt,$imgOpt,$pngKeep) {//$slash = $html4==true ? '' : '/';$slash = '/';$imgOpt = $imgOpt != '' ? $imgOpt : '';$imgFileExt = explode('.',$imgFile);$isPNG = strtolower($imgFileExt[1])=='png' ? 'true' : 'false';$agent = $_SERVER['HTTP_USER_AGENT'];// Win Internet Explorer 4.x, 5.x, 6.x,if( preg_match( "/Windows/i", $agent ) &&preg_match( "/msie/i", $agent ) &&preg_match( "/[4-6]\.[0-9]/i", $agent ) &&$isPNG == 'true') {$pngSpan = 'true';}$imgSize = getimagesize($imgFile);if($pngKeep == 'true' || $pngKeep == '1') {echo '<img src="'.$imgFile.'" alt="'.$imgAlt.'" width="'.$imgSize[0].'" height="'.$imgSize[1].'" '.$imgOpt.' '.$slash.'>';}else {if ($pngSpan==true){echo '<!--[if IE]><spantitle="'.$imgAlt.'"style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src =\''.$imgFile.'\',sizingMethod=\'scale\');display: inline-block; width: '.$imgSize[0].'px; height: '.$imgSize[1].'px;"> </span><![endif]--><!--[if !IE]><!--><img src="'.$imgFile.'" alt="'.$imgAlt.'" width="'.$imgSize[0].'" height="'.$imgSize[1].'" '.$imgOpt.' '.$slash.'><!--<![endif]-->';}else {echo '<img src="'.$imgFile.'" alt="'.$imgAlt.'" width="'.$imgSize[0].'" height="'.$imgSize[1].'" '.$imgOpt.' '.$slash.'>';}}}?>Link zur phps-Datei: _img.phps. (_img.phps liegt in der überarbeiteten Version vor. Opera-Browser die sich als IE ausgeben, werden nun durch den Conditional Comment versorgt und es kamen zusätzlich Optionen hinzu für Titel, Klassen und Rel, etc.)
Zurück zu ..