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:
$sorhossz = strlen($ebben_a_sorban_tab_elott_levo_karakterek);
$tab_hossz = ceil(($sorhossz + 1) / 8) *8 - $sorhossz;
Replace-szel:

function tabosito($matches) {
  list($sor_tabbal, $sor_tabig) = $matches;
  // Itt most space-eket rakunk be, de lehetne &nbsp; is
  return $sor_tabig . str_repeat(' ', ceil(strlen($sor_tabbal) / 8) * 8 - strlen($sor_tabbal));
}

$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! ;)