Autor | Zpráva | ||
---|---|---|---|
PetraPP Profil |
#1 · Zasláno: 22. 11. 2014, 13:36:23
Na internetu jsem našla script, který dokáže u vyhledávání zvýraznit slovo, které hledám. Funguje to dobře, ALE potřebovala bych zvýraznit i případnou diakritiku.
O co jde. Hledám slovo "az", což třeba najde lázně a já bych potřebovala zvýrazňovat i to áz = az. $text = "Mariánské Lázně"; $search = "az"; function zvyraznit($search, $text) { $search = preg_quote(htmlspecialchars($search), '~'); if ($search) { $text = preg_replace("~$search~i", '<strong>\\0</strong>', $text); } return $text; } |
||
juriad Profil |
#2 · Zasláno: 22. 11. 2014, 14:04:18
PetraPP:
Já bych to řešil úplně jinak: $text = "Aňaáñas"; $search = "Ána"; function zvyraznit($search, $text) { # toto jsou vstupy bez diakritiky zapsané jen jako ASCII (každý znak má 1 byte) $search_ = iconv('UTF-8', 'ASCII//TRANSLIT', $search); $text_ = iconv('UTF-8', 'ASCII//TRANSLIT', $text); $vystup = ""; $index_ = 0; # předchozí index # vyhledává se plně bez diakritiky a nalezená pozice se použije jako index v původním textu. while (($index = stripos($text_, $search_, $index_)) !== FALSE) { # našlo to $search na pozici $index $vystup .= mb_substr($text, $index_, $index - $index_); # před nálezem $vystup .= "<strong>" . mb_substr($text, $index, strlen($search_)) . "</strong>"; # nález $index_ = $index + strlen($search_); # posuneme se dál } $vystup .= mb_substr($text, $index_); # zbytek textu return $vystup; } echo zvyraznit($search, $text); Pozor, je třeba správně používat mb_ funkce. |
||
PetraPP Profil |
#3 · Zasláno: 22. 11. 2014, 14:14:12
Našla jsem tam možnou chybu. U tohoto to nereaguje, neudělá <strong> označení:
$text = "Lázeňské pobyty"; $search = "laz"; |
||
juriad Profil |
Mě to funguje.
<strong>Láz</strong>eňské pobyty
Jaké je kódování těch řetězců? Máš cokoli v jiném kódování než UTF-8? Zkus si v té funkci na 8. řádku vypsat, co je v $search_ a $text_. |
||
PetraPP Profil |
#5 · Zasláno: 22. 11. 2014, 14:30:49
Pravda, hodí to jiný text: "L?ze?sk? pobyty", což nechápu. Používám UTF-8.
|
||
juriad Profil |
#6 · Zasláno: 22. 11. 2014, 14:33:26
Pomůže toto http://php.net/manual/en/function.iconv.php#74101 ?
|
||
PetraPP Profil |
#7 · Zasláno: 22. 11. 2014, 14:36:29
Nepomohlo. Půjdu asi touto cestou ...
$a = array("á","ä","č","ď","é","ě","ë","í","ň","ó","ö","ř","š","ť","ú","ů","ü","ý","ž","Á","Ä","Č","Ď","É","Ě","Ë","Í","Ň","Ó","Ö","Ř","Š","Ť","Ú","Ů","Ü","Ý","Ž"); $b = array("a","a","c","d","e","e","e","i","n","o","o","r","s","t","u","u","u","y","z","A","A","C","D","E","E","E","I","N","O","O","R","S","T","U","U","U","Y","Z"); $search_ = str_replace($a, $b, $search); $text_ = str_replace($a, $b, $text); |
||
Časová prodleva: 9 let
|
0