[PHP] Jak przenieść pojedyncze znaki (m.in. a, i, o, z) do nowej linii aby nie zostawały na końcu tekstu?
Chcesz aby strona była utworzona bez wiszących na końcu linii, pojedynczych znaków, a więc w sposób zgodny z polską pisownią.
Wisząca litera "a" w przykładzie:
pojedynczych znaków, a
więc w sposób
powinna zostać automatycznie przeniesiona linijkę niżej:
pojedynczych znaków,
a więc w sposób
Zanim napiszę jak przenosić pojedyncze znaki do nowej linii, pozwolę sobie przytoczyć małą historyjkę. Otóż pewnego dnia dzwoni do mnie szef dużego wydawnictwa i pyta, czemu na wykonanych przeze mnie stronach wydawnictwa "wiszą bękarty" (innych zastrzeżeń nie miał).
W slangu dziennikarskim "bękarty" to właśnie wiszące, niechciane literki, które nie zawsze uda się wyłapać podczas korekty tekstów. Z uwagi na profil firmy, "bękarty" były dla wydawcy fatalnym błędem i nie powinny występować w prasie oraz na stronach WWW.
Rozmowa na temat "bękartów" przerodziła się w dosyć długie "posiedzenie". Nie obyło się bez przykładów stron największych wydawnictw na świecie, przytaczania znanych witryn i wreszcie odwoływania się do rozsądku.
Ostatecznie udało mi się przekonać zleceniodawcę, że "bękart" to w Internecie nic złego i nie ma sensu na siłę przekształcać zawartości strony do "poprawnego" formatu. Po prostu nikt na świecie nie przejmuje się wiszącymi znakami, bo w różnych rozdzielczościach ekranu i przy różnej wielkości czcionki, szerokość tekstu jest inna.
Oczywiście zdarzają się jakieś bardzo oficjalne serwisy, gdzie treść i forma mają ogromne znaczenie i wtedy faktycznie można pomyśleć o dokładniejszym składzie tekstu. Ale są to sytuacje wyjątkowe.
Jeżeli chcesz aby pojedyncze literki nie wisiały na końcach linii, możesz do nich dodać znak spacji, który nie przełamie się podczas przejścia do kolejnej linii i "zabierze" ze sobą literkę...
<?
$tekst="
Przykładowy, a tekst, i który o pokaże, że przełamanie z linii
nie spowoduje i wiszenie, a liter, u zwanych i bękartami! Przykładowy, a
tekst, i który o pokaże, że przełamanie z linii nie spowoduje i
wiszenie, a liter, u zwanych i także o bękartami!
";
$tekst = preg_replace("/\s(\S)\s+/"," \\1 ",$tekst);
echo $tekst;
?>
Wyrażenie regularne jest proste w konstrukcji. Mały symbol \s oznacza spacje, a duży symbol \S oznacza wszystko co spacją nie jest. Nawiasy pozwalają zgrupować literę, a by odwołać się do niej przez podwójny ukośnik podczas dodawania znaku spacji ( )
Można oczywiście w inny sposób (nawet ręcznie) dokleić wiszącą literkę do następnego wyrazu. Ważne aby całość wyglądała w kodzie HTML następująco:
Przykładowy, a tekst, i który o pokaże, że przełamanie
z linii nie spowoduje i wiszenie, a liter, u zwanych
i bękartami! Przykładowy, a tekst, i który o pokaże,
że przełamanie z linii nie spowoduje i wiszenie, a liter,
u zwanych i także o bękartami!
Przeglądarka zastąpi spacje pustymi polami, ale dzielić w nowych liniach będzie zestawy wyrazu z literą, a użytkownik zobaczy ładnie skrojony tekst. I to w pełni rozwiązuje sprawę "bękartów"...