reklama
Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Zvýraznění textu v závislosti na obsahu proměnné v PHP

darkmagic (32)|6.12.2009 13:22
Zdravim,
představte si situaci, kdy mám určitý textový reřezec a vněm potřebuju zvýraznit určitá slova (např. slovo). Slova která potřebuju zvýraznit mohou mohou být jak velkými, tak malými písmeny, s diakritikou i bez ní. Slovo, které se bude zvýrazňovat, určí uživatel, tudíž nemohu dopředu vědět, jaký tvar slovo bude mít.
Problém je, že když mám ve výchozím textovém řetězci např. slovo "dědeček", tak potřebuju zvýraznit všechna slova jako jsou dedecek, Dědeček, DĚDEČEK nebo třeba i děDECek. Mohu použív funkci str_ireplace (), která ignoruje velká a malá písmena a vyměnila by slovo dědeček za dědeček, ale toto řešení je pro mě nepoužitelné.. proč to tak je, se pokusím ukázat na příkladu:

Mám výchozí textový řetězec "Dědeček se jmenuje Petr. Vidím, jak k nám jde dědeček.", uživatel zadá ke zvýraznění slovo "dedecek", použiju-li výše zmíněnou fci - str_ireplace('dedecek', 'dedecek, 'výchozí textový řetězec') pak bude výsledek takovýhle: "dedecek se jmenuje petr. Vidím, jak k nám jde dedecek." Tímto způsobem se značně znehodnocuje výchozí text..

Učelem by mělo být jen pouhé zvýraznění určitého textu.

Díky všem za rady, jak na to:)
Dojigiri (1629)|7.12.2009 09:52
Mělo by to jít přes funkci preg_replace, prostuduj si http://www.php.net/manual/en/reference.pcre.pattern.syntax.php. Viděl bych to zhruba přibližně takhle:

[code]
$value = 'dědeček';
$text = 'Dědeček se jmenuje Petr. Vidím, jak k nám jde dědeček.';
$result = preg_replace("/($value)/i", '$1', $text);
// result: Dědeček se jmenuje Petr. Vidím, jak k nám jde dědeček.
[/code]

Nefunguje to ještě pouze v tom smyslu, že to nefunguje pro 'dedecek' (bez diakritiky, aby našel i slova s diakritikou a naopak). Ale to nefunguje ani při str_ireplace. Takhle narychlo nevím, jestli neexistuje na to nějakej podobnej přepínač jako je /i pro case insensitive.