| 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: 12 let
|
|||
0