Koola
15.06.2003, 21:18:49
Witam
Prosze o pomoc w rozwiazaniu tego "problemu".
Mam ksiege gosci oparta na pliku txt. Z formularza wysylam nicka, adres email i tresc komentarza (z pola textarea jako $text).
Nastepnie taki wpis jest wyswietlany w tabeli o szerokosci 540 pix. Jezeli ktos w formularzu wpisze np. ok.130 znakow "!" lub ok. 50 znakow "W" w jednym ciagu bez spacji to przy wyswietlaniu takiego komentarza rozjezdza mi sie strona.
Jestem poczatkujacym PHPowcem, niebardzo wiem jak to rozwiazac - szukalem w necie rozwiazania ale nic nie znalazlem
W jaki sposob rozwiazac ten problem? - prosze o lopatologiczne wytlumaczenie.
pozdr.
Cudi
15.06.2003, 21:24:28
Koola
15.06.2003, 22:29:22
Dzieki
Nie jest to coprawda idealne rozwiazanie - gdyz po kazdych X znakach wstawia przelamanie linii a nie tylko w wyrazach dluzszych niz X znakow - ale dobre i to
pozdr.
Zobacz jeszcze
to może sie przyda.
spenalzo
16.06.2003, 01:50:31
Możesz zrobić tak:
[php:1:2e82a81c2c]<?php
function podziel($string,$dl)
{
$t=explode(" ",$string);
$il=count($t);
for($i=0; $i<$il; $i++)
{
if(strlen($t[$i])<$dl)
{
$ret.=" ".$t[$i];
}
else
{
$ret.=" ".substr($t[$i],0,$dl);
}
}
return($ret);
}
?>[/php:1:2e82a81c2c]
Koola
16.06.2003, 09:17:12
Pozwolilem sobie to troszke zmienic:
[php:1:c0fcbf0152]<?php
function podziel($string, $dl)
{
$t=explode(" ", $string);
$il=count($t);
for($i=0; $i<$il; $i++)
{
if(strlen($t[$i])<$dl)
{
$ret.=" ".$t[$i];
}
else
{
$ret.=" ".wordwrap($t[$i],50,"<br>",1);
}
}
return($ret);
}
?>[/php:1:c0fcbf0152]
I teraz juz dzieli tylko te wyrazy dluzsze niz X znakow.
Zastanawia mnie tylko jedno - czemu jak wpisze takie cos:
[php:1:c0fcbf0152]<?php
$new_string=wordwrap($oryginal_string, 50, " ", 1);
print "$new_string";
?>[/php:1:c0fcbf0152]
To w stringu co 50 znakow zostanie wstawiona spacja ale nie bedzie przelamywac tekstu w tych miejscach tylko wyswietli go w jednej lini ze spacjami co 50 znakow.
Dopiero wymuszenie przelamania "pomaga":
[php:1:c0fcbf0152]<?php
$new_string=wordwrap($oryginal_string, 50, "<br>", 1);
print "$new_string";
?>[/php:1:c0fcbf0152]
Tylko w tym przypadku to przelamuje co 50 znakow pomimo tego ze jest miejsce by wstawic kolejny ciag 50 znakow.
pozdr.
scanner
16.06.2003, 10:00:33
[php:1:f0fff9a508]<?php
function WordWrap2($tresc, $cols, $cut){
// word wraping
$len = strlen($tresc);
$tag = 0;
for ($i = 0; $i < $len; $i++) {
$chr = $tresc[$i];
if ($chr == '<') {
$tag++;
} elseif ($chr == '>') {
$tag--;
} elseif (!$tag && $chr==" "){
$wordlen = 0;
} elseif (!$tag) {
$wordlen++;
}
if ((!$tag) && ($wordlen) && (!($wordlen % $cols))) {
$chr .= $cut;
}
$result .= $chr;
}
return $result;
}
$wrapped = WordWrap2($stringToWrap, 40, ' ');
?>[/php:1:f0fff9a508]
Wyciągnięte z komentarzy do manuala, nie rozwala znaczników HTML.
Koola
16.06.2003, 11:02:36
kurtz
16.06.2003, 11:25:57
Cytat
IMO wstawienie spacji powinno stwarzac mozliwosc przelamania lini w tym miejscu a u mnie tak sie nie dzieje - czemu?
pozdr.
masz racje. problem dotyczy MSIE. jesli wstawisz spacje co np 30 liter W tekst zostanie przelamany. jesli co 30 ! to juz tak nie bedzie.
najprotszym sposobem poradzenia sobie z problemem (moj patent ;) to wstawiac spacje a nastepnie & nbsp; wtedy obchodzi sie dziure w MSIE i przegladarka wie ze skonczyl sie tekst i moze przelamac.
pozdrawiam
__
Sorki za zmianę, ale nie było widać entity i nie zakumałem co wstawiasz, zeby ominąc bug'a {scanner}
konrad_vme
16.06.2003, 11:26:51
tzn. chcesz powiedzeć, że nawet jak wpiszesz normalnie (z spacjami) tekst, to i tak strona ci się rozjeżdża? Przecież jak się parametr WIDTH w tabeli ustawi, to tabela nie ma prawa się wydłużać, chyba, że masz kilka kolumn i w jednej długość wyznaczyłeś w pixelach a w innej w procentach...
kurtz
16.06.2003, 11:29:14
Cytat
tzn. chcesz powiedzeć, że nawet jak wpiszesz normalnie (z spacjami) tekst, to i tak strona ci się rozjeżdża? Przecież jak się parametr WIDTH w tabeli ustawi, to tabela nie ma prawa się wydłużać, chyba, że masz kilka kolumn i w jednej długość wyznaczyłeś w pixelach a w innej w procentach...
bzdura. MSIE jest madrzejszy gdy idzie o !!!.
scanner
16.06.2003, 11:29:35
Cytat
problem dotyczy MSIE. jesli wstawisz spacje co np 30 liter W tekst zostanie przelamany. jesli co 30 ! to juz tak nie bedzie.
Nie rozumiem... U mnie to działa bez problemów...
kurtz
16.06.2003, 11:37:29
Cytat
Nie rozumiem... U mnie to działa bez problemów...
pod adresem:
http://odothui.jukowski.com/wrapping.html
umiescilem prosty przyklad.
kod:
Kod
<html>
<body>
<table width="150"><tr>
<td>ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo ooo </td>
</tr></table>
<table width="150"><tr>
<td>!!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! !!! </td>
</tr></table>
</body>
</html>
pozdrawiam
Koola
16.06.2003, 11:45:03
Fucktycznie jak wpisze ciag liter np. WWWWWWWWWWW... to spacja przelamuje linie a jak wpisze ciag !!!!!!!... lub




?... to wszystko jest w jednej linii ze spacjami co X znakow.
Mam IE 5.0 - to wszystko jest po...
pozdr.
scanner
16.06.2003, 11:45:11
OK. Teraz już wiem. Tym razem punkt dla Ciebie

)
Koola
16.06.2003, 12:30:53
Scanner ta funkcja WordWrap2 tez nie jest doskonala - coprawda po zamianie spacji na <br> zabezpiecza przed wpisem dlugiego ciagu liter jak i ciagu znakow typu "!" i "?" nie wywala znacznikow HTMLa ale chyba przez to wyklada sie przy znaku "<" lub ">"
pozdr.
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.