Autor Zpráva
Majkld
Profil *
Zdravím,

narazil jsem na problém s kódováním když zkracuji string následujícím scriptem:
function zkratit($text,$delka){
    if(mb_strlen($text)>$delka){
        $text = htmlspecialchars(trim(mb_substr($text,0,$delka-2)))."…";
    } else { 
        $text = htmlspecialchars(trim($text));
    }
    return $text;
}

Pokud je poslední znak ve stringu s diakritikou, nahradí mi ho znak �.

V DB mám nastavené kódování utf8_general_ci, kódování v hlavičce taktéž utf8 a formátování souboru v PSPADu taktéž nastaveno na UTF8. V připojení do DB mám přidány rádky:
  mysql_query("SET NAMES utf8");
  mysql_query("SET CHARACTER SET UTF8");

Netušíte kde by se mohl vyskytovat problém?

Díky moc za pomoc


Ještě dodám zvlášní chování, když text zkracuji na 190 znaků. Text:

"Zatímco ve Spartě patří k tahounům, v národním týmu je zelenáčem. "Spojení ´Ladislav Krejčí - český reprezentant´ zní moc hezky. Udělám maximum, aby to platilo co nejdéle," říká dvacetiletý záložník s šikovnou levačkou. "

Jednou se mi text zkrátí takto:

"Zatímco ve Spartě patří k tahounům, v národním týmu je zelenáčem. "Spojení ´Ladislav Krejčí - český reprezentant´ zní moc hezky. Udělám maximum, aby to platilo co nejd�… " (168 znaků)

A např. při dalším obnovení již:

"Zatímco ve Spartě patří k tahounům, v národním týmu je zelenáčem. "Spojení ´Ladislav Krejčí - český reprezentant´ zní moc hezky. Udělám maximum, aby to platilo co nejdéle," říká dvacetilet…" (190 znaků)


Díky moc za rady.
Alphard
Profil
Zkoušel jste zadat kódování ještě jako 4. parametr funkce mb_substr()?
Milkys
Profil
Majkld:
jestli ti to pomůže, zkus nasadit toto:

function Orez($text) { 
    $zkraceny_text = mb_substr($text,'0','130','UTF-8');
    $str_end = mb_strrpos($zkraceny_text," ",'10','UTF-8');
    $zkraceny_text = mb_substr($zkraceny_text,'0',$str_end,'UTF-8');
    if ($zkraceny_text != '') {
       return $zkraceny_text.= '...';
    }
    else return '';
}
Používám to bez problémů. Zkracuje to slova nikoliv znaky což se domnívám, že je lepší. Kodování mám stejné jako ty.

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: