Saturday 9.6.2012 12:58:43, Jakuje
Řešení existuje několik. Nejjednodušší je použít vestavěnou funkci PHP wordwrap, která rozdělí řetězec na několik řádků a dlouhá slova také rozdělí zadaným znakem. Ale toto řešení mi přijde zbytečně složité a proto jsem se podíval po něčem jednodušším.
Ano. K nalezení dlouhého slova a jeho rozdělení lze použít regulární výraz. V PHP zapsaný takto:
Jedná se o jednoduché nalezení 25 znaků abecedy (lze omezit na jiné znaky, rozšířit o české znaky, nebo brát vše kromě bílých znaků – [^s] ), za kterými následuje další takovýto znak. Těchto 25 znaků přepsat a za ně umístit znak mezery (v další části se zmíním ještě o dalších možnostech oddělovačů). Jednoduché a elegantní řešení na jeden řádek.
Ale toto řešení může mít problém, pokud takto začneme dělit smysluplná slova, která poztrácejí význam. Stejně tak je problém, pokud je dělení příliš přísné a oddělí se třeba jen poslední znak, který se nakonec ve stránce zobrazí na stejném řádku. Řešení opět existuje a je jím Unicode znak 200b – výstižně pojmenovaný Zero width space – mezera nulové šířky, který se pro tuto aplikaci přesně hodí. Dle názvu se opravdu jedná o mezeru a tudíž ji prohlížeč rád zalomí, ale pokud k zalomení nedojde, jednotlivé části slova budou tvořit vzhledově slovo jediné.
Jediným problémem může být vyhledávání v prohlížeči, takto rozdělených slov. Google chrome takto rozdělená slova zvládá bez problémů, ale ostatní takto rozdělená slova nenajdou.
Výsledný řádek kódu, který tedy používám vypadá takto:
Vložení Zero Width Space za každých 6 znaků, které jsou nedělitelné, jednoho dělitelného pro zalomení.