Autor | Zpráva | ||
---|---|---|---|
Myšák Profil * |
#1 · Zasláno: 5. 3. 2015, 13:39:17
Mohl by mě někdo nakopnout, jakým stylem a funkcemi mám udělat následující? Mám kus textu, ve kterém hledám konkrétní slovo a potřebuju to slovo najít a uříznout jej tak aby bylo 50 znaků před slovem, dané slovo a 50 znaků po něm.
|
||
Chro. Profil |
Funkcí strpos si zjisti polohu slova od začátku a pak substr vyjmi řetězec od polohy -50 zjištenou strpos + strlen slova + dalších 50 znaků. Doporučuji používat funkce z rodiny mb_* jako mb_strpos, mb_strlen a mb_substr.
|
||
juriad Profil |
$text = 'text obsahující slovo někde uprostřed'; $slovo = 'slovo'; $where = mb_strpos($text, $slovo); $a = max(0, $where - 5); $l = mb_strlen($slovo) + 10; echo mb_substr($a, $l); |
||
Myšák Profil * |
#4 · Zasláno: 5. 3. 2015, 14:40:00
JJ zvládnu, děkuju.
|
||
kzk_cz Profil * |
#5 · Zasláno: 5. 3. 2015, 15:08:38
Nebo můžeš použít jednodušší variantu.
mb_strstr |
||
Časová prodleva: 10 dní
|
|||
RASik Profil * |
#6 · Zasláno: 15. 3. 2015, 20:08:16
Chro.:
Prosím, proč je lepší používat rodinu mb_....? Z návodu nejsem nijak moudrý (anglina není moje hobby). |
||
lionel messi Profil |
RASik:
„Prosím, proč je lepší používat rodinu mb_....?“ Prefix mb_ je odvodený od multi byte, čiže ide o funkcie vhodné pre prácu s multibajtovými kódovaniami (napr. bežne používaným UTF-8, kt. kóduje mnohé znaky — napr. diakritiku — v dvoch bajtoch (a niektoré znaky tuším až štyrmi bajtmi)). Napríklad funkcia strlen v skutočnosti nepočíta znaky, ale bajty (pri jednobajtovom kódovaní ide o zhodné číslo), čo sa prejaví pri použití UTF-8. Pri orezávaní môžeš zase zápasiť s rozbitou diakritikou (kedysi na to juriad vytvoril fantastickú ukážku, neviem ju dohľadať, ale dobre to ilustruje xROAL [#9]). |
||
Juraj Hajdúch Profil |
#8 · Zasláno: 15. 3. 2015, 20:15:53
RASik:
Prefix mb znamená multibyte; sú to funkcie pracujúce s textom; jednotlivé alfanumerické znaky môžu v rôznych kódovaniach (napr utf-8) zaberať rôzny počet bytov. Tieto funkcie sú práve určené na bezpečnú prácu s reťazcami. V samotnej dokumentácii PHP sa píše, že táto problematika je nad rámec samotnej dokumentácie a odkazuje na www.unicode.org/. |
||
xROAL Profil |
#9 · Zasláno: 15. 3. 2015, 20:25:45
RASik:
[#7] lionel messi a [#8] Juraj Hajdúch ma už predbehli s vysvetlením, ale mal som tu už pripravenú ukážku kódu, ako by sa prejavilo použitie bežných (teda nie multi byte) funkcií pri práci s multi byte kódovaním: <?php $mbChar = "€"; echo strlen($mbChar); // vypíše 3 - čo je počet bajtov znaku € v UTF-8 echo mb_strlen($mbChar); // vypíše správne 1, nakoľko v skutočnosti máme len jeden UTF-8 znak ?> |
||
Juraj Hajdúch Profil |
#10 · Zasláno: 15. 3. 2015, 20:33:28
xROAL:
Pekné, to vysvetľuje všetko. Len by som dodal, že u mb funkcií je možné aj deklarovať vlastné kódovanie ako nepovinný argument. |
||
juriad Profil |
#11 · Zasláno: 15. 3. 2015, 21:30:22
Jedná se o ukázku: substr vs. mb_substr - délka řetězce
|
||
Časová prodleva: 3 dny
|
|||
RASik Profil * |
#12 · Zasláno: 18. 3. 2015, 22:53:52
Díky všem, to tedy zírám, nikdy jsem na žádný problém se strlen apod. nenarazil...
|
||
Časová prodleva: 9 let
|
0