Zadejte hledaný výraz...

Označení vyhledávaného textu ve výpisu výsledků

Martin
verified
rating uzivatele
(62 hodnocení)
29. 11. 2014 01:48:48
Ahoj všichni.
Nějak jsem se zamotal a nevím jak dát. Mám výpis výsledků tahaných z DB. Jde v nich vyhledávat pomocí LIKE. Potřebuji ve výsledcích zvýraznit část řetězce, která byla hledána Něco jako když např. google zvýrazňuje ve výsledcích hledané klíčové slovo.
Tu funkci jsem si napsal, ale teď mi došlo, že je třeba brát v potaz i když uživatel použije při vyhledávání zástupné znaky a to už zaboha nedám. Není na tohle nějaké hotové řešení nebo neřešil to někdo a nenasměruje mne?
Asi by to šlo pomocí reg. výrazů, ale v tom se neorientuju.
Takže mám dvě proměné např.
$hledano = "autom%jede"
$výsledek_z_db = "Můj automobil jede po silnici"
a potřebuju z toho dostat
"Můj automobil jede po silnici"
Díky moc.
29. 11. 2014 01:48:48
https://webtrh.cz/diskuse/oznaceni-vyhledavaneho-textu-ve-vypisu-vysledku#reply1072371
drtici.pest
verified
rating uzivatele
(16 hodnocení)
29. 11. 2014 07:38:19
Napada me vyhledat pomoci znaku, ale asi to nebude nejryhlejsi a nejlepsi reseni - autom%jede rozdelit na dva texty autom a jede a pak vyhledavat zvlast pocatek autom v retezci a pak konec jede. no a kdyz fraze jede. Na zaver jen porovnat jestli je fraze jede pred nebo za autom a dle roho vypsat.... Omlouvam se, pisu z mobilu, prip. odpoledne ro mohu lepe popsat z pc.
29. 11. 2014 07:38:19
https://webtrh.cz/diskuse/oznaceni-vyhledavaneho-textu-ve-vypisu-vysledku#reply1072370
profesor
verified
rating uzivatele
(33 hodnocení)
29. 11. 2014 08:32:18
https://www.google.cz/search?q=highlight+search+result+php
29. 11. 2014 08:32:18
https://webtrh.cz/diskuse/oznaceni-vyhledavaneho-textu-ve-vypisu-vysledku#reply1072369
Martin
verified
rating uzivatele
(62 hodnocení)
29. 11. 2014 11:46:09
Napsal drtici.pest;1145164
Napada me vyhledat pomoci znaku, ale asi to nebude nejryhlejsi a nejlepsi reseni - autom%jede rozdelit na dva texty autom a jede a pak vyhledavat zvlast pocatek autom v retezci a pak konec jede. no a kdyz fraze jede. Na zaver jen porovnat jestli je fraze jede pred nebo za autom a dle roho vypsat.... Omlouvam se, pisu z mobilu, prip. odpoledne ro mohu lepe popsat z pc.
DB má 3,5 milionu záznamů, takže si nemůžu dovolit pokládat více dotazů.
---------- Příspěvek doplněn 29.11.2014 v 11:47 ----------
Napsal profesor;1145170
https://www.google.cz/search?q=highlight+search+result+php
Sice vždycky používám google a v 99% řešení najdu, ale včera v noci jsem v tom byl nějak zamotanej a už mi to nemyslelo a tohle mě nějak nenapadlo :-). Díky. Mrknu.
---------- Příspěvek doplněn 30.11.2014 v 01:00 ----------
Dneska jsem věnoval dost času hledání na googlu a nic jsem nenašel. Všude jsou návody jen na zvýraznění hledaného řetězce bez zástupných znaků. A to jsem už měl napsaný. Tak jsem si něco přečetl o reg. výrazech a sesmolil pro mě zatím dostačující věc. Možná se bude někomu hodit. Pokud z toho budou někomu znalému reg. výrazů vstávat vlasy na hlavě, omlouvám se, ale vypadá to, že to funguje. Jen to budu muset doplnit o převodní tabulku znaků s diakritikou, protože to ještě zlobí. Berte to jako nástřel.
29. 11. 2014 11:46:09
https://webtrh.cz/diskuse/oznaceni-vyhledavaneho-textu-ve-vypisu-vysledku#reply1072368
Smazany ucet 253
verified
rating uzivatele
(3 hodnocení)
30. 11. 2014 03:43:08
trošku jsem si hrál s tím tvým řešením a vylepšil to o češtinu. Nicméně regulérní výraz jsem vážně neřešil, na to bych se musel vyspat :-D jako noční zábava dobrý .... :-)))
header("Content-Type: text/html; charset=UTF-8");
function mb_str_split($str, $length = 1)
{
$encoding = mb_internal_encoding();
mb_internal_encoding('UTF-8');
if ($length < 1) return false;
$result = array();
for ($i = 0; $i < mb_strlen($str); $i += $length) {
$result[] = mb_substr($str, $i, $length);
}
return $result;
mb_internal_encoding($encoding);
}
$retezec = "Tohle je NĚjAkÁ totální hovadina s češtino-číňšťiňóu, která umí vyřešit kódování, možná to pomůže, co myslíš? :-)";
$hledane_kw = "něJaKá*vání";
$pole = mb_str_split($hledane_kw);
$reg = "(";
foreach($pole as $pismeno)
{
$pismeno = mb_strtolower($pismeno);
$pismeno_v = mb_strtoupper($pismeno);
switch ($pismeno)
{
case "*":
$reg .= ".+";
break;
case "?":
$reg .= ".";
break;
default:
$reg .= "";
break;
}
}
$reg .= ")";
$retezec = mb_ereg_replace($reg, "\0", $retezec);
echo $retezec;
var_dump($retezec);
?>
---------- Příspěvek doplněn 30.11.2014 v 03:47 ----------
btw: zkoušel jsem to jen na php 5.5.12 (localhost - wamp server na win 8.1)
---------- Příspěvek doplněn 30.11.2014 v 04:18 ----------
udělal jsem ještě funkci, aby se to dalo použít:
function highlight($string, $pattern, $length=1, $array=array(), $reg=NULL)
{
if ($length < 1) return false;
$encoding = mb_internal_encoding();
mb_internal_encoding('UTF-8');
for ($i = 0; $i < mb_strlen($pattern); $i += $length)
{
$array[] = mb_substr($pattern, $i, $length);
}
foreach($array as $char)
{
$char = mb_strtolower($char);
$charBig = mb_strtoupper($char);
switch ($char)
{
case "*":
$reg .= ".+";
break;
case "?":
$reg .= ".";
break;
default:
$reg .= "";
break;
}
}
$result = mb_ereg_replace('('.$reg.')', "\0", $string);
mb_internal_encoding($encoding);
return $result;
}
$retezec = "Tohle je NĚjAkÁ totální hovadina s češtino-číňšťiňóu, která umí vyřešit kódování, možná to pomůže, co myslíš? :-)";
$pattern = "něJaKá*dování";
header("Content-Type: text/html; charset=UTF-8");
echo highlight($retezec, $pattern) . "
n";
echo highlight("Věta: Příliš žluťoučký kůň úpěl ďábelské ódy je divná", "prilis*dy") . "
n";
echo highlight("Věta: Příliš žluťoučký kůň úpěl ďábelské ódy je divná", "příliš*dy") . "
n";
?>
pokud máš v db jiné kódování než utf-8, tak je ještě potřeba vyřešit převod kódování z databáze do funkce ....
30. 11. 2014 03:43:08
https://webtrh.cz/diskuse/oznaceni-vyhledavaneho-textu-ve-vypisu-vysledku#reply1072367
Martin
verified
rating uzivatele
(62 hodnocení)
30. 11. 2014 10:20:24
Díky rapemer. Vypadá to, že to šlape dobře.
30. 11. 2014 10:20:24
https://webtrh.cz/diskuse/oznaceni-vyhledavaneho-textu-ve-vypisu-vysledku#reply1072366
Pro odpověď se přihlašte.
Přihlásit