Hlavní navigace

PHP Trik: návštěvníci z vyhledávačů

Tomáš Líbal

Chcete zvýšit komfort prohlížení vašich stránek? Významná část návštěvníků na váš web jistě přišla přes internetový vyhledávač. Můžete jim usnadnit nalezení těch pravých informací, které hledají, například zvýrazněním vyhledávané fráze na vašich stránkách.

V čem to spočívá?

Jedná se o php skript, který pomůže návštěvníkům rychleji nalézt v textu na vaši stránce hledaný výraz tím, že zvýrazní hledaná slova na stránce. Probereme si jednu z možností, jak na to.

Pokud návštěvník nezadá přímo ve webovém prohlížeči adresu vašich webových stránek, je v HTTP hlavičce referer uložena URL adresa, ze které přišel na aktuální stránku. Metoda následujícího skriptu toho využívá. Z adresy zjistíme, jestli uživatel přišel z internetového vyhledávače. Pokud ano, tak téměř každý vyhledávač má hledaná slova přímo v URL adrese. Tato slova jsou uložena v proměnné, která se liší podle typu vyhledávače. V mém příkladu je použito pole s různými písmeny, které používají velké vyhledávače. Jednotlivá slova nebo fráze jsou v této proměnné oddělena zpravidla znaménkem plus. Skript jednoduše přidá na začátek a konec každého hledaného slova v textu, který byl předtím například nahrán z MySQL databáze, html tagy font s nastaveným stylem, tak, aby měla slova odlišnou barvu pozadí.

Zdrojový kód :

<?php
$url_referer = $_SERVER['HTTP_REFERER'];
$vyhledavace = array('google.com','centrum.cz','seznam.cz');
// Zjistime nazev domeny odkud prichazi navastevnik
// Odstranime "www." a zkontroujem zda prisel z vyhledavace
$host = parse_url($url_referer);
$host = eregi_replace("www\.","",$host['host']);
foreach($vyhledavace as $server)
{
  if($host == $server)
  {
    $promenne = array('q','qs','w');
    $pozice = stripos($url_referer,"?");
    // Odstranime domenu, a nechame si v promene "$text" jenom promene z URL adresy
    $text = substr($url_referer,$pozice+1,strlen($url_referer));
    // Rozdeli "$text" na pole s promenyma z URL adresy
    $pole = explode("&",$text);
    $pocet = count($pole);
    if($pocet > 0)
    {
      $i = 0;
      // Text, se kterym budeme pracovat. Muze to byt napriklad text z MySQL databaze.
      text = "Krymah pesost zahrokrám ptástéš v hrazovpě Sémý a sabanou pisup ďamou
            sodmifu Sudřouň bělapuř vivou vránnéčo k řuběp";
      while($i < $pocet)
      {
        // Nyni pracujeme s jednotlivymi retezci ve formatu promena=hodnota
        // Rozdelime proto retezec na dve hodnoty oddelene rovnitkem
        // Nove pole "hodnoty" pak bude mit nasledujici strukturou "promena" => "hodnota promene"
        $hodnoty = split('=', $pole[$i]);
        foreach($promenne as $query_string)
        {
          // Pokud se promenna(query string) nachazi v poli s promennyma tak v nasem textu barevne zvyraznime podklad slov
          if($query_string == $hodnoty[0])
          {
            $kontrola = strpos($hodnoty[1],"+");
            // Pokud bylo v dotazu vice slov provede zvyrazneni slova pro kazde slovo zvlast
            if(!$kontrola === false)
            {
              $slova = explode("+",$hodnoty[1]);
              $pocet = count($slova);
              $upraveny_text = $text;
              for($i=0;$i <= $pocet;$i++)
              {
                $upraveny_text = str_replace($slova[$i],"<font style='color:#000000;background-color:#e2e2e2;'>".$slova[$i]."</font>",$upraveny_text);
              }
              echo $upraveny_text;
            }
            // Zvyrazneni v textu, pokud byl vyhledavan jeden vyraz
            else
            {
              $upraveny_text = str_replace($hodnoty[1],"<font style='color:#000000;background-color:#e2e2e2;'>".$hodnoty[1]."</font>",$text);
              echo $upraveny_text;
            }
          }
        }
        $i++;
      }
    }
  }
}
?> 

Pokud chcete přidat do skriptu podporu pro další vyhledávač, stačí připsat do pole „vyhledavace“ název serveru a doménu prvního řádu. Pokud server používá jiný název proměnné pro vyhledávání, pak přidejte do pole „promenne“ její název. Tabulka názvů proměnných u vybraných vyhledávačů:

Proměnné u vybraných vyhledávačů
Vyhledávač Proměnná
Google.com q
Seznam.cz w
Centrum.cz q
Atlas.cz q
Yahoo.com p
Aol.com query
Wikipedia.com search
Jyxo.xz q
Slunecnice.cz qs

Vylepšení skriptu

Vyhledávače většinou kódují písmena s diakritikou, proto je vhodné přidat do kódu jejich zpětné dekódování na normální znaky.

Vytvoříme si proto pole s názvem „znaky“ se strukturou „kódovaný znak“ ⇒ „dekódovaný znak“ a pomocí funkce strtr přeměníme zakódované znaky v hledaných slovech na písmena s diakritikou. Přeměnu provedeme jako na pole „hodnoty“:

<?php
  $znaky = array("%EC" => "ě","%B9" => "š","%E8" => "č","%F8" => "ř","%BE" => "ž","%FD" => "ý");
  $hodnoty[1] = strtr($hodnoty[1],$znaky);
?> 

Řádek, kde se převádí znaky v poli „hodnoty“ umístíme nad řádek, ve kterém se přidávají tagy „font“. Tak i na pole slova

<?php
  $slova[$i] = strtr($slova[$i],$znaky);
?> 

Tento kód umístíme za řádek, na kterém se vytváří pole „slova“ pomocí funkce explode.

Anketa

Vítáte jako čtenář podobné obarvení textu dle vyhledávače?

Našli jste v článku chybu?

27. 3. 2006 23:16

ziizii (neregistrovaný)
Osobne jsem se toho teda nejvic naucil behem nucenych praci :-)

27. 3. 2006 14:33

zjoova (neregistrovaný)
pouzit mod-rewrite, z adresy www.nieco.sk/clanok/nadpis-clanku presmerovavat treba na www.nieco.sk/clanok.php?nadpis=nadpis-clanku, v PHPku pak pokladat dotaz ve smyslu "SELECT clanek FROM databaza WHERE transformuj_nadpis(naddpis_db) = nadpis". Bud takhle pres uzivatelskou fci v db nebo rychleji pri ukladani clanku do db rovnou ukladat i nadpis bez diakritiky, s pomlckami.
Viz tez http://www.root.cz/clanky/coz-si-tak-trochu-zaprepisovat/
Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

DigiZone.cz: „Black Friday 2016“: závěrečné zhodnocení

„Black Friday 2016“: závěrečné zhodnocení

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: I církev dnes vyrábí potraviny

I církev dnes vyrábí potraviny

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Podnikatel.cz: Udávání kvůli EET začalo

Udávání kvůli EET začalo