ugrás a tartalomhoz

PHP textareaban tabulátor

PredMan · 2008. Jan. 30. (Sze), 11.38
Sziasztok!

találtam a neten egy olyan JS-es kódot, amely segítségével tudok tabulátort használni textareaban.

itt a link: http://www.webdeveloper.com/forum/showthread.php?s=&threadid=32317

Ezt be is építettem, működik, de van egy kis gond:
a textareat meg még egy pár inputot arra használok, hogy az adatbázisba beszúrok adatokat, majd azokat kilistázom egy php fájlban. Itt a gond! listázásnál nem jeleníti meg a tabulátor jeleket a php, pedig ha visszanézem adatbázisban a szöveget, akkor ott van az összes tabulátor benne!

vázlatosan ez lenne a cél:

- szoveg....123
- sz........12
- szov......31

tehát hogy listázásnál is ott legyenek a tabok eredeti hosszukkal.

Eddig ezekkel próbálkoztam:
1. <pre><? echo $sor["leiras"]; ?></pre>
itt megjelennek ugyan a tabok eredeti hosszukkal, de a <pre> széttólja a táblázatomat.

2. str_replace("\t", "&nbsp;", $szoveg);
ez se jó, mert ugye a szövegek más és más hosszúak lehetnek...

esetleg tudnátok valami tanácsot adni erre a problémára?

segítségeteket előre is köszönöm!
 
1

space vs non breaking space vs tab

Poetro · 2008. Jan. 30. (Sze), 12.01
A tab karakter alapvetően (ha más felül nem definiálja) egy 8 karakteres rács következő rácspontjára ugrik. Azaz ha a sorban vannak előtte karakterek, akkor meg kell nézni azok hosszát + 1, el kell osztani ezt 8-al majd felefelé kerekíteni ezt a számot, és megszorozni 8-al, majd kivonni az eddigi sorhosszt.

Tehát a pszeudókód:
  1. $sorhossz = strlen($ebben_a_sorban_tab_elott_levo_karakterek);  
  2. $tab_hossz = ceil(($sorhossz + 1) / 8) *8 - $sorhossz;  
Replace-szel:
  1. function tabosito($matches) {  
  2.   list($sor_tabbal$sor_tabig) = $matches;  
  3.   // Itt most space-eket rakunk be, de lehetne &nbsp; is  
  4.   return $sor_tabig . str_repeat(' 'ceil(strlen($sor_tabbal) / 8) * 8 - strlen($sor_tabbal));  
  5. }  
  6.   
  7. $szoveg = preg_replace_callback('/(^[^\t]*)\t/m''tabosito'$szoveg);  
szerk: a fenti kód csak az első tabot cseréli ki a sorban, esetleg megfontolandó többször lefuttatni a kódot több tab cseréléséhez.
2

thanx

PredMan · 2008. Feb. 1. (P), 10.58
köszönöm a segítségedet! ;)