home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 January / PCWorld_2005-01_cd.bin / novinky / Interval / clanek03.htm < prev    next >
Encoding:
Extensible Markup Language  |  2004-12-09  |  14.8 KB  |  156 lines

  1. <?xml version='1.0' encoding='windows-1250'?>
  2. <!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Strict//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd'>
  3. <html xmlns='http://www.w3.org/1999/xhtml' xml:lang='cs' lang='cs'>
  4. <head>
  5. <meta http-equiv='Content-Type' content='text/html; charset=windows-1250' />
  6. <meta http-equiv='Content-language' content='cs' />
  7. <meta http-equiv='Cache-control' content='no-cache' />
  8. <meta http-equiv='Pragma' content='no-cache' />
  9. <meta http-equiv='Expires' content='-1' />
  10. <meta name='robots' content='index,follow' />
  11. <meta name='googlebot' content='index,follow,snippet,noarchive' />
  12. <meta name='description' content='Interval.cz - Internetov² magazφn o webdesignu, v²voji webov²ch aplikacφ a e-komerci. VÜe podstatnΘ o technologiφch XHTML, HTML, CSS, DHTML, JavaScript, XML, .NET, ASP, PHP, Java, J2ME, SQL, WAP...' />
  13. <meta name='keywords' content='Interval' />
  14. <meta name='ICBM' content='49.1915, 16.626' />
  15. <meta name='DC.Title' content='Interval.cz' />
  16. <meta name='DC.Identifier' content='http://interval.cz' />
  17. <meta name='DC.Language' content='cs' />
  18. <meta http-equiv='pics-label' content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline EN v2.0" l gen true for "http://interval.cz" r (nz 1 vz 1 lz 1 oz 1 cz 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://interval.cz" r (n 0 s 0 v 0 l 0))' />
  19. <meta http-equiv='imagetoolbar' content='no' />
  20. <meta http-equiv='MSThemeCompatible' content='no' />
  21. <meta name='MSSmartTagsPreventParsing' content='true' />
  22. <link rel='shortcut icon' type='image/x-icon' href='favicon.ico' />
  23. <link rel='alternate' type='application/rss+xml' title='RSS Interval.cz' href='http://interval.cz/__rss/rss.asp' />
  24. <link rel='home' href='http://interval.cz' />
  25. <link rel='search' href='http://interval.cz/search_ex.asp' />
  26. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/html4.css' />
  27. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/basic_all.css' />
  28. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/homepage_all.css' />
  29. <link rel='stylesheet' type='text/css' media='all' href='__services/styles/articles_all.css' />
  30. <link rel='stylesheet' type='text/css' media='print' href='__services/styles/articles_print.css' />
  31. <title>Interval.cz - webdesign a e-komerce denn∞</title>
  32. </head>
  33. <body class='interval interval-articles'>
  34. <div id='page-header'><div id='interval-logo'><h1 title='Interval.cz - denn∞ o tvorb∞ webu a e-komerci (logo & index link)'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Interval.cz<span></span></a></h1></div><div id='advertising-page-header'></div><div class='page-maker'> </div></div>
  35. <div id='page-topmenu'><h2 class='textversion'>Navigace</h2><div id='page-mainmenu'><h3 class='textversion'>Hlavnφ menu</h3><ul><li class='first selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz'>Titulnφ strana</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=14'>Webdesign</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=15'>V²voj aplikacφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=18'>E-komerce</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=17'>Nßstroje</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz?idcategory=16'>Magazφn</a></li><li class='right selected'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.inshop.cz'>Knihkupectvφ</a></li><li class='right'><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interforum.interval.cz'>Interforum</a></li></ul></div><div id='page-mainmenu-maker'> </div></div>
  36. <div id='page-body'><div id='page-left'><div id='article'>
  37.  
  38.  
  39. <h2>Identifikace prohlφ₧eΦ∙ v mobilnφch telefonech</h2>
  40. <p id='prepend'>P°i tvorb∞ strßnek se sna₧φm odd∞lovat vzhled od obsahu tφm, ₧e pou₧φvßm XHTML a CSS. Nedßvno jsem ale narazil na jeden problΘm. Vytvß°el jsem strßnku, ve kterΘ jsem navigaΦnφ nabφdku umis¥oval absolutnφm pozicovßnφm do levΘho sloupce. Nic by na tom nebylo, kdybych se na strßnku nepodφval mobilnφm telefonem. Zjistil jsem, ₧e navigaΦnφ menu nikde nenφ.</p>
  41.  
  42. <p>Testovßnφm jsem dosp∞l k zßv∞ru, ₧e m∙j mobilnφ telefon sice podporuje n∞kterΘ vlastnosti CSS, ale ne vÜechny a asi ne ·pln∞ sprßvn∞. P°ivedlo m∞ to tedy na myÜlenku, ₧e kdybych pro mobilnφ telefony odstranil definici CSS, strßnky by se zobrazovaly sprßvn∞. Zkusil jsem to ud∞lat ruΦn∞ a bylo to skuteΦn∞ tak.</p>
  43. <p>Jen₧e jsem narazil na problΘm, jak programov∞ zjistit, ₧e se na strßnky dφvß n∞kdo z mobilnφho telefonu. Napadlo m∞, ₧e by se dal mobilnφ prohlφ₧eΦ (prohlφ₧eΦ v mobilnφm telefonu) rozpoznat podle v²skytu urΦitΘho °et∞zce v identifikaci prohlφ₧eΦe. Ka₧d² prohlφ₧eΦ se toti₧ strßnce identifikuje urΦit²m °et∞zcem, kter² obsahuje r∙znΘ informace o typu prohlφ₧eΦe. Tato identifikace se naÜt∞stφ dß zjistit jednoduch²m skriptem.</p>
  44. <p>Ukßzka skriptu pro PHP:</p>
  45.  
  46. <div class='sample'>
  47. <?php echo $_SERVER["HTTP_USER_AGENT"]; ?>
  48. </div>
  49.  
  50. <p>Ukßzka skriptu pro ASP:</p>
  51. <div class='sample'>
  52. <% Response.Write Request.ServerVariables("HTTP_USER_AGENT") %>
  53. </div>
  54.  
  55. <p>Te∩ u₧ jen zb²valo zφskat dostateΦn∞ velk² vzorek identifikacφ r∙zn²ch druh∙ prohlφ₧eΦ∙ (hlavn∞ t∞ch mobilnφch) a sestavit n∞jak² °φdφcφ °et∞zec, podle kterΘho by se daly identifikovat mobilnφ prohlφ₧eΦe.</p>
  56. <p>Poda°ilo se mi na internetu najφt seznam, kter² obsahoval vφce ne₧ p∞t tisφc r∙zn²ch identifikacφ prohlφ₧eΦ∙, p°evß₧n∞ z mobilnφch telefon∙, a na zßklad∞ tohoto seznamu jsem sestavil °φdφcφ °et∞zec a naprogramoval funkci, kterß podle test∙ dokß₧e na 98,2 % identifikovat prohlφ₧eΦ z mobilnφho telefonu. Funkci jsem nazval <code>IsMobile</code> a jejφ k≤d m∙₧ete vid∞t nφ₧e.</p>
  57. <p>Funkce <code>IsMobile</code> pro PHP:</p>
  58.  
  59. <div class='sample'>
  60. <?php
  61. <br />function IsMobile()
  62. <br />{
  63. <br />  // funkcφ ERegI zjistφm v²skyt n∞kterΘ Φßsti °φdφcφho °et∞zce
  64. <br />  // v °et∞zci identifikace prohlφ₧eΦe
  65. <br />  $ret = ERegI(QuoteMeta("UP.LINK|MIDP|UP.BROWSER|NOKIA|MOT|SEC-".
  66. <br />  "|WAP|ERICSSON|SAMSUNG|SIE-|PHONE|PANASONIC".
  67. <br />  "|MITSU|LG|PORTALMMM|BLACKBERRY|SYMBIAN|PHILIPS".
  68. <br />  "|SENDO|KLONDIKE|SAGEM|MOBILE|ALCATEL|SONY"),
  69. <br />  $_SERVER["HTTP_USER_AGENT"]);
  70. <br />  // vrßcenφ nßvratovΘ hodnoty
  71. <br />  return $ret;
  72. <br />};
  73. <br />?>
  74. </div>
  75.  
  76. <p>Funkce <code>IsMobile</code> pro ASP:</p>
  77.  
  78. <div class='sample'>
  79. <%
  80. <br />Function IsMobile()
  81. <br />'deklarace prom∞nnΘ pro regulßrnφ v²razy
  82. <br />Dim regEx
  83. <br /> 
  84. <br />  'vytvo°enφ prom∞nnΘ pro regulßrnφ v²razy
  85. <br />  Set regEx = New RegExp
  86. <br />  'nastavenφ regulßrnφho v²razu (°φdφcφ °et∞zec)
  87. <br />  regEx.Pattern = "UP\.LINK|MIDP|UP\.BROWSER|NOKIA|MOT|SEC-" _
  88. <br />  & "|WAP|ERICSSON|SAMSUNG|SIE-|PHONE|PANASONIC" _
  89. <br />  & "|MITSU|LG|PORTALMMM|BLACKBERRY|SYMBIAN|PHILIPS" _
  90. <br />  & "|SENDO|KLONDIKE|SAGEM|MOBILE|ALCATEL|SONY"
  91. <br />  'nastavenφ nerozliÜovßnφ velikosti pφsmen
  92. <br />  regEx.IgnoreCase = True
  93. <br />  'spuÜt∞nφ porovnßnφ (vrßtφ nßvratovou hodnotu funkce)
  94. <br />  IsMobile = regEx.Test(Request.ServerVariables("HTTP_USER_AGENT"))
  95. <br />End Function
  96. <br />%>
  97. </div>
  98.  
  99. <h3>Jak jsem dosp∞l k v²sledk∙m?</h3>
  100. <p>Nejd°φve jsem vytvo°il strßnku, kterß pou₧φvala v²Üe uvedenΘ skripty pro vypsßnφ identifikace prohlφ₧eΦe, ze kterΘ jsem cht∞l zφskßvat identifikace mobilnφch telefon∙ na zßklad∞ p°φsp∞vk∙ od u₧ivatel∙ strßnek. Ukßzalo se, ₧e to nenφ dobrß metoda, a proto mi DuÜan Janovsk² (Yuh∙) poskytl seznam osmdesßti Üesti identifikacφ mobilnφch prohlφ₧eΦ∙ z LOGu <a href='http://www.jakpsatweb.cz/weblog/'>jeho webu</a>, co₧ bylo sice velmi malΘ mno₧stvφ, ale postaΦujφcφ pro zßkladnφ anal²zu.</p>
  101. <p>Vzhledem k tomu, ₧e zp∙sob zφskßvßnφ identifikaΦnφch °et∞zc∙ se mi zdßl nedostateΦn² (zdlouhav² postup a malß pravd∞podobnost zφskßnφ v∞tÜφho poΦtu zßjemc∙ o ·Φast), napadlo m∞, ₧e bych se po identifikacφch mobilnφch prohlφ₧eΦ∙ mohl poohlΘdnout na internetu. Poda°ilo se mi najφt <a href='http://www.postfile.com/downloads/_external/agents.php'>seznam</a>, kter² obsahoval (po odstran∞nφ r∙znΘho smetφ) 5 102 zßznam∙, a ten se mi zdßl ji₧ dostateΦn∞ velk² k praktickΘmu pou₧itφ.</p>
  102. <p>Anal²zou tohoto seznamu jsem sestavil nejΦast∞ji se vyskytujφcφ °et∞zce, kterΘ jednoznaΦn∞ identifikovaly mobilnφ prohlφ₧eΦe, a sestavil jsem je podle Φetnosti jejich v²skytu do °φdφcφho °et∞zce, kter² jsem pak pou₧il v regulßrnφm v²razu ve funkci <code>IsMobile</code>.</p>
  103.  
  104. <h3>Metodika pou₧itß p°i anal²ze</h3>
  105. <p>Nejprve jsem provedl odhad nejΦast∞ji se vyskytujφcφch °et∞zc∙ v identifikacφch mobilnφch prohlφ₧eΦ∙. Podφval jsem se tedy na identifikace a °et∞zec, kter² se na prvnφ pohled vyskytoval nejΦast∞ji, jsem pou₧il. PotΘ jsem poΦφtal Φetnost v²skytu t∞chto jednotliv²ch °et∞zc∙ a kontroloval °ßdky, kterΘ do v²sledku nezapadaly. Postupn∞ jsem tak urΦoval dalÜφ °et∞zce, kterΘ se daly pou₧φt. Postupn²m poΦφtßnφm Φetnostφ v²skytu t∞chto °et∞zc∙ jsem dosp∞l a₧ ke koneΦnΘmu sestavenφ °φdφcφho °et∞zce.</p>
  106.  
  107. <h3>Vyu₧itφ funkce <code>IsMobile</code></h3>
  108. <p>Tato funkce m∙₧e poslou₧it vÜem tv∙rc∙m strßnek, a¥ u₧ p°ipravovan²ch "ruΦn∞" Φi dynamicky generovan²ch, kte°φ necht∞jφ nebo nemohou udr₧ovat vφce verzφ strßnek (pro mobily a desktopy). Funkce se dß pou₧φt nejen pro odfiltrovßnφ definic CSS, ale v podstat∞ pro jakoukoli jinou filtraci informacφ, kterΘ se majφ nebo nemajφ zobrazovat p°i p°φstupu z mobilnφho telefonu (nap°φklad odfiltrovßnφ reklamnφch banner∙ a podobn∞).</p>
  109.  
  110. <h3>Odkazy a zdroje</h3>
  111.  
  112. <div class='list'>
  113. <ul>
  114. <li><a href='http://www.bobocop.cz/blog/0410archiv.php#70623'>Data k v²sledku v²zkumu mobilnφch prohlφ₧eΦ∙</a> - Bohumφr Bedna°φk (Bob∙v weblog, 3. 10. 2004)</li>
  115. <li><a href='http://www.postfile.com/downloads/_external/agents.php'>Seznam p°φstup∙ z mobilnφch prohlφ₧eΦ∙</a> (www.postfile.com)</li>
  116. </ul>
  117. </div>
  118.  
  119. <div id='article-author'>
  120. <a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/autor.asp?author=248'>Bedna°φk, Bohumφr</a> (17. 11. 2004)
  121.  
  122. </div>
  123.  
  124.  
  125. </div></div>
  126. <div id='page-right'><h2 class='textversion'>Prav² sloupek</h2>
  127. <div id='search'><h3 class='textversion'>Vyhledßvßnφ</h3><form method='get' action='http://interval.cz/search.asp'><div><input type='text' name='hledej' class='text' /><input type='submit' class='submit' value='Najdi!' /></div></form><div><a href='http://interval.cz/search_ex.asp'>RozÜφ°enΘ vyhledßvßnφ</a></div></div>
  128.  
  129.  
  130.  
  131. <div class='page-right-box book'>
  132.     <h3>Kni₧nφ novinka</h3>
  133.     <div class='page-right-box-in'>
  134.         <div class='book-top'>
  135.             <h4><a href='http://interval.cz/__redirect/redirect.asp?what=interval_booknews&url=http://interval.inshop.cz/inshop/scripts/detail.asp?ItemID=280'>xCSS - referenΦnφ p°φruΦka</a></h4>
  136.         </div>
  137.         <div class='image'>
  138.             <img src='podklady/knihy/image.jpg' alt='obßlka' title='obßlka' /></a>
  139.         </div>
  140.         <div class='book-bottom'>Cena: <span class='book-price-old'>350 KΦ</span> <span class='book-price-new'>315 KΦ</span></div>
  141.     </div>
  142. </div>
  143.  
  144.  
  145.  
  146. <div class='page-right-box reading'><h3 title='NejΦten∞jÜφ Φlßnky za poslednφch 14 dn∙'>NejΦten∞jÜφ</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3658'>VyhlßÜenφ sout∞₧e Interzen 2004</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3682'>Zend's PHP 5 Coding Contest - wtcSQLite</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3693'>PSPad - zaΦφnßme tvo°it webov² projekt</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3694'>SEO - struktura a p°esm∞rovßnφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3689'>NauΦte se vid∞t kreativn∞</a></li></ul></div></div><div class='page-right-box cauldron'><h3 title='Nejdiskutovan∞jÜφ Φlßnky za poslednφch 21 dn∙'>Diskuznφ kotel</h3><div class='page-right-box-in'><ul><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3680' title='(34 komentß°∙)'>H°φchy pro ÜφlenΘho korektora - autentizace, autentikace nebo autentifikace?</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3694' title='(31 komentß°∙)'>SEO - struktura a p°esm∞rovßnφ</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3683' title='(13 komentß°∙)'>Individualizace stylopis∙ k eliminaci chyb prohlφ₧eΦ∙ - teoretick² p°ehled</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3682' title='(13 komentß°∙)'>Zend's PHP 5 Coding Contest - wtcSQLite</a></li><li><a href='http://interval.cz/__redirect/redirect.asp?what=interval_offline&url=http://interval.cz/clanek.asp?article=3676' title='(11 komentß°∙)'>Webdesign s webov²mi standardy</a></li></ul></div></div>
  147.  
  148.  
  149.  
  150. <div class='page-right-box emailserv'><h3>Email servis</h3><div class='page-right-box-in'><form action='prihlaseni.asp' method='post'><div class='shell'><input class='text' type='text' name='adresa' /></div><div class='shell'><input class='radio' type='radio' value='1' name='co' checked='checked' />T²dennφ p°ehled Φlßnk∙</div><div class='shell'><input class='radio' type='radio' value='2' name='co' />HELP konference</div><div class='shell'><input class='submit' type='submit' value='P°ihlßsit' /></div></form></div></div>
  151. </div>
  152. <div class='page-maker'> </div><div class='page-maker-white'> </div></div>
  153. <div id='page-foot'><div id='page-foot-menu'><a href='http://interval.cz/reklama.asp'>Inzerce na Interval.cz</a> | <a href='http://interval.cz/redakce.asp'>Redakce Interval.cz</a> | <a href='http://interval.cz/autori.asp'>Hledßme novΘ autory</a></div><div id='issn'>ISSN 1212-8651</div><div id='page-foot-zoner'>© Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje <a href='http://interval.cz/privacy.asp'>prßvnφ p°edpisy</a>o ochran∞ osobnφch ·daj∙.</div></div>
  154. </body>
  155. </html>
  156.