Zvýraznění hledaného slova v řetězci – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zvýraznění hledaného slova v řetězci – PHP – Fórum – Programujte.comZvýraznění hledaného slova v řetězci – PHP – Fórum – Programujte.com

 

Tomáš
~ Anonymní uživatel
560 příspěvků
16. 11. 2010   #1
-
0
-

Zdravím všechny, potřeboval bych poradit.
V MySQL tabulce vyhledávám (pomocí LIKE "%něco%") záznamy obsahující slovo např.: "pár". MySQL např. vyhledá dva např. záznamy (což je v pořádku, to chci - nehledět na velká a malá písmena):

Párek holubů ...
Slavíme výročí páry ...

Ale potom chci tyto výrazy vypsat, a zajímalo by mě jak docílím toho, aby se mi strčil před "Pár" i "pár" <span class="zvyrazneni"> a za to </span>

Zatím o řeším:



$dily=explode($hledany_vyraz,$retezec);
$celek='';
for($i=0;$i<(count($dily)-1);$i++) {$celek=$celek.$dily[$i].'<span class="zvyrazneni">'.$hledany_vyraz.'</span>'; }
$celek=$celek.$dily[count($dily)-1];

Ale explode kouká na velikost písmen. Takže se nezvýrazní všechno to, co našla databáze. Navíc zvýrazňuju hledané slovo :-/

Nahlásit jako SPAM
IP: 195.22.50.–
insider0
Věrný člen
16. 11. 2010   #2
-
0
-
Nahlásit jako SPAM
IP: 78.45.102.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
Tomáš
~ Anonymní uživatel
560 příspěvků
16. 11. 2010   #3
-
0
-

No výborný, tak toto pomohlo, díky moc. Ale zbývá tu ještě jeden problémek.

Když budu hledat slovo $hledane='petr'; nahradím pomocí této funkce v řetězci kdaždé slovo 'petr', 'Petr', 'PEtR' řetězcem '<span class="zvyrazneni">'.$hledane.'</span>'. Tak zvyrazněné slovo bude vždy jenom 'petr'. Prostě při hledání slova 'petr' potřebuji výsledek : <span class="zvyrazneni">Petr</span>, Martin a <span class="zvyrazneni">PETr</span>. Tzn. jak zjistím, která slova to nahradila?

Ještě jednou díky moc za radu.

Nahlásit jako SPAM
IP: 195.22.50.–
Tomáš
~ Anonymní uživatel
560 příspěvků
16. 11. 2010   #4
-
0
-

A ještě jedna věc, kterou jsem teď zksil .. a to:
str_ireplace('úřad','#','Úřad práce je úřad práce'); napíše Úřad práce je # práce, ale s českými znaky je obecně asi velký problém, že?

Nahlásit jako SPAM
IP: 195.22.50.–
insider0
Věrný člen
16. 11. 2010   #5
-
0
-

To Tomáš : jo, to je to, cim jsem si nebyl jisty - tady budes muset pouzit regularni vyrazy, neco jako

preg_replace("/(".preg_quote($hledane).")/i","<span class=\"zvyrazneni\">$1</span>",$str);

ale nejsem si jisty, jak si poradi s cestinou, kdyz tak budes muset pouzit iconv pro prevod kodovani na iso/win1250

Nahlásit jako SPAM
IP: 78.45.102.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
Tomáš
~ Anonymní uživatel
560 příspěvků
16. 11. 2010   #6
-
0
-

Tak to opravdu funguje, když převedu UTF-8 na win1250, bez převodu to nepozná Ú:

$string = iconv('UTF-8','windows-1250','Úřad práce je úřad práce');

$pattern = iconv('UTF-8','windows-1250','/úřad/i');
$replacement = iconv('UTF-8','windows-1250','#');
$text = preg_replace($pattern, $replacement, $string);
echo iconv('windows-1250','UTF-8',$text);

Vrací: # práce je # práce - což je to co potřebuju.

Ještě bych rád věděl jestli existuje něco co by mi pomohlo vyřešit problémek viz. výše v 16. 11. 2010 @ 12:26. - vlastně potřebuju do pole uložit právě ty nahrazené řetězce. Z tohoto příkladu by to bylo pole ('Úřad','úřad'). Potřeboval bych to proto, abych pak vypisoval zvýrazněně přesně to, co v tom textu bylo (co se velikosti písmen týče)

Díky (jinak jestli jsem dobře pochopil, to //i ve výrazu je ignorovat velikost pismen?)

Nahlásit jako SPAM
IP: 195.22.50.–
KIIV
~ Moderátor
+43
God of flame
16. 11. 2010   #7
-
0
-

pokud to mas v UTF tak pouzivej funkce mb_ tj multi-byte

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
insider0
Věrný člen
16. 11. 2010   #8
-
0
-

To Tomáš : jestli chces jen dostat do pole odpovidajici slova, tak muzes pouzit preg_match_all, ktera udela to, co potrebujes, ale jestli to chces rovnou nahradit, tak pak $replacement bude

$replacement = "<span class=\"zvyraznit\">$1</span>";

ktery to rovnou nahradi.
Jak KIIV zminoval, muzes pouzit mb funkce misto toho zdlouhaveho iconv, ale v mb_ neni preg replace. Nejblizsi je mb_eregi_replace - http://www.php.net/manual/en/function.mb-eregi-replace.php akorat je tam tusim trosicku jiny zapis to regularniho vyrazu

Nahlásit jako SPAM
IP: 78.45.102.–
I don't want to see you go,[br] The sky is over[br] Even though we can't afford[br] The sky is over,[br] The sky is over us.[br][br] CIVILIZATION IS OVER
Tomáš
~ Anonymní uživatel
560 příspěvků
18. 11. 2010   #9
-
0
-

No stačí mi to rovnou nahradit. Když tam zapíšu to co jsi psal ($replacement = "<span class=\"zvyraznit\">$1</span>";
), tak to nefunguje :-/

Abych pravdu řekl, tak tomu ani nerozumím. Nevím co je proměnná $1 (jestli je to proměnná? - proč by byla zapsaná přímo v uvozovkách?). Mohl bys mi to prosím trochu vysvětlit, případně mě někam odkázat? Třeba to pak nějak dám dohromady...

Děkuji za pomoc.

Nahlásit jako SPAM
IP: 195.22.50.–
KIIV
~ Moderátor
+43
God of flame
18. 11. 2010   #10
-
0
-

je to pseudo promenna.. kdyz das neco v regularnim vyrazu do bloku pomoci (.*) tak $1 obsahuje prvni zavorku
tedy aspon v ramci preg_match

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Tomáš
~ Anonymní uživatel
560 příspěvků
18. 11. 2010   #11
-
0
-

Výborně, tak už to začínám pobírat. Stačilo to dát do závorky a je to. Díky moc insidere a KIIVe.

Nahlásit jako SPAM
IP: 195.22.50.–
Tomáš
~ Anonymní uživatel
560 příspěvků
18. 11. 2010   #12
-
0
-

Ještě jedna dronost. Zdá se že preg_quote neescapuje /, dá se to nějak obejít nebo vyřešit?

Nahlásit jako SPAM
IP: 89.111.97.–
CZechBoY+4
Věrný člen
22. 11. 2010   #13
-
0
-

jo dej tam třeba funkci AddSlashes(string)

Nahlásit jako SPAM
IP: 213.192.10.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 47 hostů

Podobná vlákna

Vyhledání slova v řetězci — založil DVNanakin

Zvýraznění syntaxe v Memo — založil Colpik

Zvýraznění položky v listview — založil durmitor

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý