Jump to content
php.lv forumi

Izravēt visus /n starp 2 tagiem


Lynx

Recommended Posts

Tiku pielaists pie viena projekta un saskāros ar problēmu. Ir datubāzes lauks kuram sākumā ir nenoteikta daudzuma teksts un pašās beigās sākas tabula ar tieši šādu struktūru:

 

<TABLE cellspacing=10 cellpadding=0 border=0>

<TR>

 

<TD align="center"><A href=""><IMG src="" border="0" alt="1"></A></TD>

<TD align="center"><A href=""><IMG src="" border="0" alt="1"></A></TD>

</TR>

 

utt

</TABLE>

 

Problēma rodas tur, ka tabula ir veidota visur saspaidot "enter" un nl2br parvesh visus "enter" par bezjeedzigi lielu atstarpi starp teksta beigaam un tabulas sakumu ar atteliem.

Ideja bija tāda, ka nepieciešams skripts, kas izravē visus enter starp tagiem <TABLE> un </TABLE> un pēc tam savada visu to datubāzē.

 

Shitik taalu es tiku:

 

izraveejam newline: str_replace('/n',"" , $teksts)

Un ar izvadīšanu un ievadīšanu db arī problēmas nebūs.

 

Bet kā panākt, lai tie newlaini tiktu nonemti tikai starp <table> </table> nav ne jausmas.

Link to comment
Share on other sites

Hmm, nedarbojas. Nav nekādu erroru, bet arī izlabots nekas netiek. Meiģināju pats ilgu laiku salīdzināt, kā darbojas forumu bbcode, lasīt manuāli un salabot šo gabalu, lai strādātu, nekā.

Link to comment
Share on other sites

Hm, man uz php 5.0.1 šāds fragments:

<?php
 $text = "aa\nbb<table>cc\ndd\n</table>ff\ngg";
 $text = preg_replace('@\<table\>.*</table\>@Umse', 'str_replace("\n","","\0")', $text);
 echo str_replace("\n", '\n', $text);
?>

izdod šādu rezultātu:

aa\nbb<table>ccdd</table>ff\ngg

Man laikam strādā :)

Link to comment
Share on other sites

Nu jā tad redzkur ir problēma :) Uz tā servera ir tikai php 4.

 

Es itkā salīdzinot ar bbcode piemēriem dabūju gatavu šādu brīnumu, lieki piebilst, ka nestrādā :)

 

$text= preg_replace("#\<TABLE\>(.*?)\</TABLE>#si", str_replace("\n","","\\1"), $text );

Link to comment
Share on other sites

str_replace pēdiņās jāliek! citādi pirms preg_replace izsaukuma notiek str_replace izsaukums, kas ir galīgi nepareizi.

 

Edit: es nezinu kas tur var tev nestrādāt ar php4.

Pamēģināju uz 4.3.11. Strādā pilnīgi tāpat, kā minēju augstāk.

Edited by bubu
Link to comment
Share on other sites

Njaa es atkal pameiģināju tavu variantu un strādā. Bet ar tekstu no datubāzes, kas aizņem aptuveni vairāk par 200 rindām nestrādā. Un sākumā nestrādāja manas muļķības dēļ - pavisam biju aizmirsis pieminēt, ka tabula izskatās šādi: <TABLE cellspacing=10 cellpadding=0 border=0>

 

Veicu izmaiņas koda un patiešām nekādi \n neparādijās iekš tabulas. Bet tikko, kā palaidu caur nl2br rezultātu tā visā tabulā bija <b /r> iekšā un velaizvien repleicotais vārds no preg_replace.

 

$text = preg_replace('@\<TABLE cellspacing=10 cellpadding=0 border=0\>.*</TABLE\>@Umse', 'str_replace("\n","asd","\0")', $teksts);
echo nl2br($text);

 

Daļa no rezultāta izskatās šādi:

<TABLE cellspacing=10 cellpadding=0 border=0><TR><br />
asd<br />
asd<TD><A href=""><IMG src="" border="0" alt="1"></A></TD><br />
asd<TD>utt

 

Tātad sanāk, ka nostrādā tikai daļēji.

Link to comment
Share on other sites

×
×
  • Create New...