Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pojedyncze litery na końcu linijek...
Forum PHP.pl > Forum > PHP
grzesgracz
Witam!
Mam takie pytanie: czy da się zrobić, żeby pojedyncze literki takie jak: w, a, o, z, nie pozostawały nigdy na końcu linijki jako ostatnie? To rzecz jasna błąd w pisowni, którego chciałbym uniknąc na stronie...
Moze w css jest cos takiego?
Bede wdzieczny za pomoc
Pozdrawiam,
Grzesiek
Gonzo
O ile używasz czcionki o stałej szerokości znaku, to chyba nie będzie większych problemów.

Najpierw funkcją explode() zamieniasz string z tekstem na tablicę. Potem w pętli lecisz sobie licząc, które słowo zostanie na końcu. Jeżeli jest krótsze od powiedzmy 4 znaków, wstawiasz przed nim <br>. Na koniec zamieniasz wszystko z powrotem na tekst i jazda.

Oczywiście musisz to sobie dopracować smile.gif.
grzesgracz
Hmm...
Nie o taki sposób mi chodziło :wink: Nie uzywam czcionki o regularnych literach, ani nie wiem, w tabelkach o jakiej szerokosci bedzie wyswietlany tekst. Dzieki.
cichy
Raczej nie możliwe do wykonania.
Bo niby skąd skrypt miałby wiedzieć gdzie wstawić <br /> skoro nie wie gdzie tekst w danej linii sie zakończy?
Jedyna rada jest taka by pisać tekst w miare dokładnie.

Pozdro
zombie
no niekoniecznie. można by spróbować każdą spację po znaku krótszym, niż 3 znaki zamienić na '&nbsp;'. Zawsze będą wtedy zrzucane o linijkę niżej... Chyba lepsze bedzie [manual:bc7b1f521b]preg_match[/manual:bc7b1f521b], niż [manual:bc7b1f521b]explode[/manual:bc7b1f521b]
Bakus
Ja w jednym ze skryptów zrobiłem zamianę przez:[php:1:1aada83098]<?php
$wp = str_replace(' w ', ' w&nbsp;', $wp);
$wp = str_replace(' z ', ' z&nbsp;', $wp) ;
$wp = str_replace(' i ', ' i&nbsp;', $wp);
$wp = str_replace(' a ', ' a&nbsp;', $wp);
?>[/php:1:1aada83098]Wiem, że jest to mało wydajne, ale jest proste, czytelne i daje oczekiwane rezultaty...
Bora
Powinno być szybciej
[php:1:3a39f7bb1d]<?php
$from=array(' w ',' z ',' i ',' a ');
$to=array(' w&nbsp;',' z&nbsp;',' i&nbsp;',' a&nbsp;');
$wp = str_replace($from, $to, $wp);
?>[/php:1:3a39f7bb1d]
Bakus
Przy moim rozwiązaniu skrypt wykonuje się w czasie 0.08-0.09 a przy twoim 0.07-0.08 winksmiley.jpg rzeczywiście wielka róźnica winksmiley.jpg
zombie
... z tym, że ta metoda nie daje pewności. poza tym brakuje mi tu 'o', 'u', 'na', 'po', 'do', 'od' ... właściwie może sie pojawić każda litera. Np. 'A. Kwaśniewski'
Bora
oczywiście że będzie to niewielka różnica ale zawsze powinno sie pisać żeby było jak najszybciej tongue.gifP
zresztą dopisując nowe elementy nie powoduje że po raz któryś odpala sie to str_replace tongue.gifP.
Bakus
z kolei przy większej ilości fraz do zamiany (co zasugerował zombie) wpisywanie tego w 2 tablice może spowodować, przy odrobinie nieuwagi kraksę...
lepiej z punktu widzenia czytelności i łatwości zarządzania zrobić to tak:[php:1:ba1d5f7dfb]<?php
$klucze = array( // tablica z tym co mamy zamieniać
" w " => " w&nbsp;",
" z " => " z&nbsp;",
" i " => " i&nbsp;",
" a " => " a&nbsp;"
);

$co = $naco = array(); //tablice robocze

while (list ($key, $val) = each ($klucze))
{ // przepisujemy tablice do innej formy
$co[] = $key;
$naco[] = $val;
}
unset($klucze); // tablica klucze nie jest już potrzebna... mamy 2 nowe tablice...

// zamieniamy co trza
$wp = str_replace($co, $naco, $wp);
?>[/php:1:ba1d5f7dfb]Taką tablicę można łatwo uzupełniać i jest ona czytelna... winksmiley.jpg Chyba poprawie to u siebie na takie... winksmiley.jpg
O... Właśnie... Można całość kodu jaki napisałem wrzucić do funkcji i uzupełnić o brakujące pozycje i będzie to można dołączać do bibliotek funkcji w skryptach, gdzie możliwe jest wprowadzanie tekstów...
zalew
jest 6rano a nie spalem i jeszcze mam robote, a wiec stac mnie jedynie na pseudokod.. bo pomysl mi sie wydaje ciekawy, wiec oto moja spiaca koncepcja rozwiazania ;)..

[php:1:9e7d942c80]<?php
$exp = 70; //przewidywana liczba liter w linijce
$drops = array ('w', 'z'....); // tablica slow do zrzucenia

function dropSingles ($exp, $drops) {
$lines = 'sth'; /*
tablica z rozbicia calego tekstu na co 70 znakow
plus opcja ze co natkniecie na nowy akapit czyli <p> lub <br> resetuje, zeby nie pokielbasilo... nie jestem w stanie teraz napisac jej dzialania
*/
for ($i=0; $i<count($lines); $i++) {
$words = explode(' ', $lines[$i]);
$lastWord = $words[count($words)];
/* lapie ostatnie slowo i sprawdza czy jest jednym z szukanych przyimkow
jak tak to zastepuje*/
if (in_array($lastWord, $drops ) {
$words[count($words)] = "<br />".$lastWord;
}

$newTxt .= implode($words, ''); //skaldamy znow txt do kupy
}
return $newTxt;
}
?>[/php:1:9e7d942c80]

penwie sa bledy ale moze udalo mi sie przedstawic zamysl :)
grzesgracz
Wielkie dzieki wszystkim za pomoc, widze, ze jest z czego wybierac (choc liczylem na to, ze sa gotowe funkcje w css, albo php biggrin.gif )
Mysle jednak, ze cos uda mi sie z tego stworzyc smile.gif
A moze ma ktos jeszcze inne pomysly?
DeyV
Cytat
z kolei przy większej ilości fraz do zamiany (co zasugerował zombie) wpisywanie tego w 2 tablice może spowodować, przy odrobinie nieuwagi kraksę...
lepiej z punktu widzenia czytelności i łatwości zarządzania zrobić ....


Cytat
string [manual:f8d82ef413]strtr [/manual:f8d82ef413]( string str, array replace_pairs)
[php:1:f8d82ef413]<?php
$trans = array("hello" => "hi", "hi" => "hello");
echo strtr("hi all, I said hello", $trans);
?>[/php:1:f8d82ef413]
Ozzy
Cytat
Taką tablicę można łatwo uzupełniać i jest ona czytelna...

Nie łatwiej tak (pomijając ten strtrsmile.gif) ?
[php:1:82cb84871b]<?php
$wp = str_replace(array_keys($klucze), array_values($klucze), $wp);
?>[/php:1:82cb84871b]
grzesgracz
Myślę, że przydałoby się coś, co zamieniałoby w kazdym tekscie frazy typu: "cos tam z czyms innym" na "cos tam z&nbsp;czyms innym" prawda?
To zalatwiloby sprawe.
Pozdrawiam
Gonzo
Jak na razie to każdy próbuje tylko inaczej zrobić (czytaj: zapisać) dokładnie to samo biggrin.gif. Hehe, moim zdaniem raczej dużo tutaj nikt nie wykombinuje, jeżeli nie użyjesz czcionki monotypicznej.

BTW: po co ci w ogóle coś takiego :?: Wydaje mi się, że we własnym serwisie nie jest ważna aż taka zabawa w 'literki'. Owszem, ortografia, interpunkcja, język... Ale bez przesady smile.gif. Nie piszesz w końcu do urzędu biggrin.gif.
grzesgracz
Robie oficjalna strone jednego z polskich artystow... (ostatnio BARDZO popularnego) smile.gif
Polonistki z UJ, ktore m.in. Go uwielbiaja upominaja sie o to snitch.gif wiec chcialem cos takiego sprobowac...
Tak swoja droga, to nie wierzylem, ze nie ma gotowej funkcji w zadnym jezyku, ktora by na takie rzeczy zwazala...

Dzieki, za pomoc

PS: Na pewno nasuwa sie pytanie: czyja to strona? snitch.gif hehehe, jak skoncze, dam znac, choc juz powoli w sieci krazy...
Gonzo
No wiesz... Ja to bym się zdziwił, jeżeli coś takiego by istniało... Przecież parser wyrzuca ci po prostu zwykły tekst. php wcale nie interesuje, jak to będzie wyglądało w przeglądarce (przecież to dopiero ona następnie interpretuje otrzymany kod).

Mi się podoba pomysł Zalewa. Jeśli bardzo zależy ci na osiągnięciu tego efektu, może spróbuj użyć tego kodu (po kilku przeróbkach smile.gif ).

3m się, chętnie zobaczę tą stronkę smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.