Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Długosc wpisu TEXTAREA a rozjezdzajaca sie strona
Forum PHP.pl > Forum > PHP
Koola
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 sad.gif
W jaki sposob rozwiazac ten problem? - prosze o lopatologiczne wytlumaczenie.

pozdr.
Koola
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 biggrin.gif

pozdr.
dob
Zobacz jeszcze to może sie przyda.
spenalzo
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
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
[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
Wszystko ladnie pieknie - poniewaz ja w komentarzu nie uzywam znacznikow htmla to w moim przypadku ta funkcje "WordWrap2" dziala tak samo jak "podziel" ale... dalej musze wymuszac lamanie lini bo jak wstawie sama spacje co X znakow to linia bedzie wygladac tak:

questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif itd. bez przelamania

IMO wstawienie spacji powinno stwarzac mozliwosc przelamania lini w tym miejscu a u mnie tak sie nie dzieje - czemu?

pozdr.
kurtz
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
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
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
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
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
Fucktycznie jak wpisze ciag liter np. WWWWWWWWWWW... to spacja przelamuje linie a jak wpisze ciag !!!!!!!... lub questionmark.gifquestionmark.gifquestionmark.gifquestionmark.gif?... to wszystko jest w jednej linii ze spacjami co X znakow.
Mam IE 5.0 - to wszystko jest po...

pozdr.
scanner
OK. Teraz już wiem. Tym razem punkt dla Ciebie smile.gif)
Koola
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 ">" sad.gif

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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.