Autor Zpráva
Mufna
Profil
Zdravím Vás. Mám funkci a kus skriptu pro načtení textu z DB, ošetření znaků UTF-8 (aby jeden český znak byl vždy brán jen jako jeden znak) a zobrazení prvních 52 znaků (v případě delšího textu ukončení třemi tečkami). Potřeboval bych tam zamontovat povolení pro interpretaci HTML tagů <b> a <sup>.
Funkce pro UTF-8:
function utf8_substr($str,$from,$len) {
  return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                       '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                       '$1',$str);
}

funkční část mého skriptu (řádek s komentářem byl jen můj pokus, který skončil chybovou hláškou), která ale neobsahuje to povolení tagů <b> a <sup>
if ($desc) {
     echo utf8_substr(strip_tags($row["description"]),0,52);
//  echo utf8_substr(strip_tags($row["description"]),'<b><sup>');
     if (strlen($row["description"])>52) echo ' ...';
Alphard
Profil
Tohle nemusíte vymýšlet, PHP má funkci mb_strlen() a mb_substr(). (Jsou právě pro utf-8)
Ty povolené tagy nemají důvod nefungovat, není chyba jinde?
Máte předčasně uzavřenou závorku u funkce strip_tags().
Mufna
Profil
Alphard
Máte předčasně uzavřenou závorku u funkce strip_tags().

Díky, navedlo mě to na řešení:
echo utf8_substr(strip_tags($row["description"],'<b><sup>'),0,52);
Alphard
Profil
Mufna:
Jsem rád, že to funguje, ale snažil jsem se vám ještě navíc říct, že utf8_substr() lze nahradit funkcí mb_substr().
AM_
Profil
Jsem rád, že to funguje
ne nutně - z toho reguláru mám pocit, že počítá s maximálně 2bytovými znaky - utf8 může mít až 5tibytové, to je tedy spíš hypotetické, ale s 3bytovými jsem se setkal. A když bude někdo na webu chtít udělat paseku, napsat ten pětibytový imho také lze.

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: