Autor | Zpráva | ||
---|---|---|---|
Mufna Profil |
#1 · Zasláno: 13. 8. 2009, 18:25:59
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 |
#2 · Zasláno: 13. 8. 2009, 19:04:38 · Upravil/a: Alphard
Tohle nemusíte vymýšlet, PHP má funkci mb_strlen() a mb_substr(). (Jsou právě pro utf-8)
Máte předčasně uzavřenou závorku u funkce strip_tags(). |
||
Mufna Profil |
#3 · Zasláno: 14. 8. 2009, 09:58:32
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 |
#4 · Zasláno: 14. 8. 2009, 10:22:30
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 |
#5 · Zasláno: 14. 8. 2009, 11:14:11
„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. |
||
Časová prodleva: 15 let
|
0