Autor Zpráva
Lavka
Profil
Dobrý den,
mám v databázi uložené delší řetězce textu a když je vypisuji používám pro náhled prvních 20 znaků tuto funkci:
echo substr($text_z_databaze, 0, 20);
Funkce funguje dobře dokud není poslední vypisovaný znak s diakritikou (ú,ů,ř,š...). V tom případě se napíše jako poslední znak kosočtverec s otazníkem uprostřed. Mám domněnku, že se v UTF-8 znaky s diakritikou skládají ve skutečnosti ze dvou znaků a tato funkce je rozdělí. Proto bych byl rád, kdyby se našlo řešení jak tento problém řešit. (v databázi používám kódování utf8_unicode_ci a na stránkách UTF-8)
Předem děkuji za odpovědi.
panther
Profil
Lavka:
mb_substr

Nebo i zde na diskusi byla funkce, která brala ohled na mezery a usekla řetězec za posledním celým slovem. Kdyžtak si ji dohledej.
Rellik
Profil
Můžeš zkusiti toto. Bere to ohledy na celé slova a vypisuje jen počet slov, který zadáš.
Alphard
Profil
Nebo se můžete inspirovat na Nejčastější potíže s PHP (FAQ) » Zkrácení článku pro výpis perexu.
Joker
Profil
Ještě pro doplnění:

Lavka:
Mám domněnku, že se v UTF-8 znaky s diakritikou skládají ve skutečnosti ze dvou znaků a tato funkce je rozdělí
Opravdu to skoro tak je, jen se neskládají ze dvou znaků (že by třeba „ž“ se skládalo ze „z“ a háčku), ale ze dvou bajtů. V UTF-8 mohou znaky být kódované do více bajtů (obecně i více než dvou, i když u nás používaných znaků se to netýká) a jelikož substr počítá bajty, může text rozdělit uvnitř znaku.
To jen na vysvětlení.

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: