[PHP] dzielenie długich wyrazów

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
Shevchenko1987
Zakręcona Traszka
Zakręcona Traszka
Posty: 818
Rejestracja: 31 sty 2008, 11:52
Płeć: Mężczyzna
Wersja Ubuntu: 24.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

[PHP] dzielenie długich wyrazów

Post autor: Shevchenko1987 »

Na stronie internetowej dla której pisze skrypty php natknąłem się na następujący problem: jeśli w komentarzu znajdzie sie słowo dłuższe niż pole przeznaczone na jego treść, to wyraz ten wystaje poza ramki.

Obrazek

Co zrobić by takie wyrazy były automatycznie dzielone i przenoszone do następnej linijki?
Jeśli wybierasz Ubuntu to tylko LTS!
gumbasek
Piegowaty Guziec
Piegowaty Guziec
Posty: 2
Rejestracja: 15 maja 2007, 10:43
Płeć: Mężczyzna
Wersja Ubuntu: 7.10
Kontakt:

Odp: [PHP] dzielenie długich wyrazów

Post autor: gumbasek »

Awatar użytkownika
Shevchenko1987
Zakręcona Traszka
Zakręcona Traszka
Posty: 818
Rejestracja: 31 sty 2008, 11:52
Płeć: Mężczyzna
Wersja Ubuntu: 24.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [PHP] dzielenie długich wyrazów

Post autor: Shevchenko1987 »

Dziekuje za pomoc, ale z manuala potrafię korzystać. :-P Nie bardzo widzę natomiast konkretne zastosowanie Twojej 'propozycji'?
Jeśli wybierasz Ubuntu to tylko LTS!
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [PHP] dzielenie długich wyrazów

Post autor: leon1313 »

"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
Awatar użytkownika
Shevchenko1987
Zakręcona Traszka
Zakręcona Traszka
Posty: 818
Rejestracja: 31 sty 2008, 11:52
Płeć: Mężczyzna
Wersja Ubuntu: 24.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [PHP] dzielenie długich wyrazów

Post autor: Shevchenko1987 »

Wordwrap nie rozwiązuje problemu, jest jedynie półśrodkiem do zastosowania 'na teraz'. W przykładzie wygląda to ładnie, bo jest zastosowana czcionka o stałej szerokości znaku.
Jeśli wybierasz Ubuntu to tylko LTS!
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [PHP] dzielenie długich wyrazów

Post autor: leon1313 »

Shevchenko1987 pisze: Co zrobić by takie wyrazy były automatycznie dzielone i przenoszone do następnej linijki?
IMO, dostałeś odpowiedź adekwatną do Twojego pytania.
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
Awatar użytkownika
Shevchenko1987
Zakręcona Traszka
Zakręcona Traszka
Posty: 818
Rejestracja: 31 sty 2008, 11:52
Płeć: Mężczyzna
Wersja Ubuntu: 24.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [PHP] dzielenie długich wyrazów

Post autor: Shevchenko1987 »

Widzę, że jest tu bardzo silną tendencja do rzucania mięsem. Myślałem, że screen wyjaśni wszystko, pomyliłem się. Kończąc na tym offtop, wróćmy może do problemu nurtującego mnie od jakiegoś już czasu. Rozwiązaniem może być oczywiście liczenie znaków z uwzględnieniem ich szerokości, ale przy zmianie czcionki wszystko siada...
Jeśli wybierasz Ubuntu to tylko LTS!
abc667
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 28 lip 2009, 20:43
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [PHP] dzielenie długich wyrazów

Post autor: abc667 »

Ale jak chcesz to niby rozwiązać? Po stronie serwera nic nie zrobisz bo nic nie wiesz o czcionce u użytkownika, bo tak naprawdę on może mieć dowolna. Ta twoja "chmurka" może być renderowana różnie zależnie od silnika i od różnych innych mniej przewidywalnych rzeczy (np. innych elementów strony). Po stronie użytkownika wydajnie to zrobić też jest bardzo ciężko, jeśli by się w ogóle udało. Wg mnie jedynym rozwiązaniem jest zastosowanie overflow: auto plus ewentualnie jeszcze jeden kontener jakby coś wyłaziło.
Awatar użytkownika
leon1313
Zakręcona Traszka
Zakręcona Traszka
Posty: 668
Rejestracja: 02 sty 2006, 19:35
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: KDE Plasma
Architektura: x86

Odp: [PHP] dzielenie długich wyrazów

Post autor: leon1313 »

Gdzieś-kiedyś spotkałem ustawienia podobne do tych stosowanych na nk.pl przy opisach , tj. ukrywanie części tekstu nie mieszczącego się w wybranym polu i rozciąganie pola po najechaniu myszką.
Było to bodajże na php.pl, więc jeśli Ci to odpowiada tam spróbuj tam zadać pytanie.
"Poza tym dostałeś PLONKa i zabraniam Ci pisać na te grupe!!! Powiedziałem PLONK i sie zamknij i nawet nie knuj rzeby mi odpisywać! Zabraniam!!!"
abc667
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 28 lip 2009, 20:43
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [PHP] dzielenie długich wyrazów

Post autor: abc667 »

No to

Kod: Zaznacz cały

overflow:hidden + *:hover {overflow: visible; } 
. Zawsze można poczekać na CSS3 z ostatecznym rozwiązaniem, ale to rozwiązanie pewnie nie zadowoli Shevchenko1987. Teoretycznie można by przy pomocy JS dodawać kolejne litery do długich wyrazów i sprawdzać czy wielkość kontenera się zmieniła, ale to już prawie tak szalone jak użycie tutaj np. flasha.

edit
Shevchenko1987, jak chcesz mogę pomyśleć jutro nad jakimś innym rozwiązaniem przy pomocy JS
Awatar użytkownika
Shevchenko1987
Zakręcona Traszka
Zakręcona Traszka
Posty: 818
Rejestracja: 31 sty 2008, 11:52
Płeć: Mężczyzna
Wersja Ubuntu: 24.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [PHP] dzielenie długich wyrazów

Post autor: Shevchenko1987 »

abc667 twoja rada zadowala szefa, więc uważam problem za rozwiązany. ;-)

Dzięki za pomoc.
Jeśli wybierasz Ubuntu to tylko LTS!
abc667
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 28 lip 2009, 20:43
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [PHP] dzielenie długich wyrazów

Post autor: abc667 »

Trochę mi się nudziło i skleciłem coś takiego. Działa dobrze jeśli w sprawdzanym kontenerze nie ma "długich" znaczników, pogrubień czcionki itp..

Kod: Zaznacz cały

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8">
  <meta http-equiv="Content-Language" content="pl">
<script type="text/javascript">
	var znaki = [];
	window.onload = function() {
		for(var i=33;i<256;i++)
		{
			document.getElementById('char-test').innerHTML = String.fromCharCode(i);
			znaki[i] = document.getElementById('char-test').offsetWidth;
		}

		//sprawdzamy wszystkie bloki 
		//tutaj dla przykładu sprawdzamy jeden
		//szerokość w pikselach, width - border-width
		checkBlock(document.getElementById('test'), 76);
	}

	var segments = [];
	var tmp = 0;
	var seg_len = 0;

	function checkBlock(obj, block_width) {
		var out = '';
		segments = obj.innerHTML.toString().replace( new RegExp( "<", "gi" ), " <" ).replace( new RegExp( ">", "gi" ), "> " ).split(' ');
		for(var j=0;j<segments.length;j++)
		{
			seg_len = 0;
			var sout = '';
			for(var k=0;k<segments[j].length;k++)
			{
				tmp = segments[j].charCodeAt(k);
				if((tmp > 255) || (tmp < 32))
				{
					tmp = 64;
				}
				seg_len += znaki[ tmp ];
				if(seg_len > block_width)
				{
					sout += ' '+segments[j][k];
					seg_len = 0;
				}
				else
				{
					sout += segments[j][k];
				}
			}
			out += sout+' ';
		}
		//alert(out);
		obj.innerHTML=out;
	}
</script>

<title>...</title>
</head>
<body>
	
<span id="char-test" style="margin: 0; padding: 0; border: none; visibility:hidden;"></span> <!-- przy pomocy tego spana sprawdzamy szerkość znaków, musi być 'gdzieś', jest niewidoczny -->
<p id="test" style="width: 80px; border: 1px solid black;">aaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaa afffffffffffffffffffffffffffffff dddddddddddddddddddd dbfndbkjnd
dfgdfgdfg

dfg

df

ggd

dfd

df</p>

</body>
</html>
Awatar użytkownika
Shevchenko1987
Zakręcona Traszka
Zakręcona Traszka
Posty: 818
Rejestracja: 31 sty 2008, 11:52
Płeć: Mężczyzna
Wersja Ubuntu: 24.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

Odp: [PHP] dzielenie długich wyrazów

Post autor: Shevchenko1987 »

Właśnie o to mi chodziło! :-D

Jeszcze raz dzięki!
Jeśli wybierasz Ubuntu to tylko LTS!
abc667
Piegowaty Guziec
Piegowaty Guziec
Posty: 29
Rejestracja: 28 lip 2009, 20:43
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME
Architektura: x86

Odp: [PHP] dzielenie długich wyrazów

Post autor: abc667 »

Aha, pewnie o tym wiesz, ale napisze dla pewności. Ten span musi mieć dokładnie taką czcionkę jak sprawdzane boksy. A jeśli byś chciał sprawdzać boksy z dwoma rodzajami czcionek na jednej stronie przypadkiem to trzeba by dodać obsługę wielu tablic ze znakami, ale chyba tylko o komentarze chodzi. Aha, jeszcze ten cały JS przydałoby się dać w try-catch jak i inne części, ale to już nie związane z tematem.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość