Autor Zpráva
PetraPP
Profil
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
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
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
Pravda, hodí to jiný text: "L?ze?sk? pobyty", což nechápu. Používám UTF-8.
juriad
Profil
Pomůže toto http://php.net/manual/en/function.iconv.php#74101 ?
PetraPP
Profil
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);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: