Autor | Zpráva | ||
---|---|---|---|
pajadvorak Profil |
#1 · Zasláno: 8. 11. 2018, 20:36:12
Mám tento kód, který mi zvýrazní hledaná slova. Ale problém, který řeším je, že mi to nezvýrazňuje slova s diakritikou. Jakou tam vidítě chybu? Děkuji
function odzvyraznit($matches) { return preg_replace('~<span class="search-result">([^<]*)</span>~i', '\\1', $matches[0]); } function zvyraznit($text) { $hledany = chop(trim(preg_replace('/\s+/',' ',$_GET["text"]))); $search = preg_quote(htmlspecialchars(chop(trim(preg_replace('/\s+/',' ',$_GET["text"])))), '~'); $hledany = str_replace('(', '\(', $hledany); $hledany = str_replace(')', '\)', $hledany); $search = str_replace('(', '\(', $search); $search = str_replace(')', '\)', $search); if ($search) { $arrays = Explode(" ", $hledany); for($s = 0; $s <= Count($arrays) - 1; $s++){ $text = preg_replace("~$arrays[$s]~i", '<span class="search-result">\\0</span>', $text); // odstranění zvýrazňování z obsahu <option> a <textarea> a zevnitř značek a entit $span = '<span class="search-result">[^<]*</span>'; $pattern = "~<(option|textarea)[\\s>]([^<]*$span)+|<([^>]*$span)+|&([^;]*$span)+~i"; $text = preg_replace_callback($pattern, 'odzvyraznit', $text); } } return $text; } |
||
Kajman Profil |
#2 · Zasláno: 8. 11. 2018, 22:45:10
Pokud používáte utf-8, tak zkuste používat flag u.
|
||
Mlocik97 Profil |
#3 · Zasláno: 8. 11. 2018, 22:48:43
Kajman:
ja skôr nechápem prečo používa PHP, nieje toto vhodnejšie robiť na client-sidu (v JS)? jestli správne chápem čo chce. |
||
Andrej.B Profil |
#4 · Zasláno: 9. 11. 2018, 05:24:15
Kajman:
Skusal som si ten kod a mne funguje super. Je to v nastaveni PHP? Lebo z poslaneho linku neviem kde moze byt chyba. |
||
pajadvorak Profil |
#5 · Zasláno: 9. 11. 2018, 20:00:31
Kajman:
Tak špatně. Omlouvám se. Diakritika chodí. Problém je v tom, když se hledá bez diakritiky. Takže například hledám hruska. Najde mi to v tabulce hruška. A le hruška v textu není zvýrazněna. Otázka tedy zní: jak udělat, aby to ve výsledku označilo i slova s diakritikou při zadání do hledání slova bez diakritiky? Děkuji. |
||
Kajman Profil |
#6 · Zasláno: 9. 11. 2018, 20:45:49
Udělejte v hledaném řetězci náhrady, např. s nahradíte za [sš] atp., abyste hledal hru[sš]ka. Kdyby to ani s flagem u nebralo dobře velikost písmen a nenašlo slovo HRUŠKA, tak s nahraďte za [sšŠ].
|
||
Keeehi Profil |
#7 · Zasláno: 9. 11. 2018, 21:12:53
pajadvorak:
Problém toho je, že ty dopředu nevíš, jestli a které písmeno má diakritiku, takže to bohužel musíš udělat u všech písmen. [h][rř][uůú][sš][k][aá] Druhá možnost je to rozsekat na slova, odstranit diakritiku (na to jsou nástroje), porovnat a pokud se to bude shodovat tak zvýraznit původní slovo a nakonec to zase složit dohromady. |
||
Kcko Profil |
#8 · Zasláno: 9. 11. 2018, 22:02:07
Nebo to uděláš tak, že si origo text převedeš vedle na text bez diakritiky.
Následující funkce Ti vyznačí na jakých pozicích se hledané slovo nachází. Poté projedeš originální text znak po znaku a tam kde ti ona funkce vyznačila začátek a konec, vložíš ono zvýraznění. Tohle jsem používal kdysi dávno a fungovalo to dobře. public static function checkPosition($word, $text) { $last_pos = 0; $from = array(); $to = array(); while( ($pos = strpos($text, $word, $last_pos)) !== false) { $last_pos = $pos + 1; $positions[] = array("od" => $pos, "do" => $pos + strlen($word)); $from[] = $pos; $to[] = $pos + strlen($word) - 1; } return array($from, $to); } |
||
Časová prodleva: 6 let
|
0