WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Kodhjälp: text-parser för quotes (https://www.wn.se/forum/showthread.php?t=19023)

chrizz 2007-01-31 15:08

Jag blir vansinnig på den här enkla funktionen och jag får inte till det ordentligt (det är eventuella radbrytningar (\n) i texten som orsakar problem.

Tanken är att $text är en enkel oformatterad text, och funktionen ska returnera allt med tecknet ">" framför varje rad. $chars_per_row är styrningen för hur långa raderna ska bli (man får ta hänsyn till att det är ord i texten, så man inte klipper orden rakt av).

Jag bifogar en grundstomme, men kom gärna med en ny infallsvinkel om du har bättre förslag:

Kod:


function text2rows($text, $chars_per_row)
{
  $words = explode(' ', $text);
  $i = 0;
  $row = array();

  foreach ($words AS $t)
  {
  $row[$i] .= $t.' ';
  if (strlen($row[$i]) > $chars_per_row)
    $i++; // ny rad.
  }

  foreach ($row AS $t)
  $new_text .= "> ".trim($t)."\n";

  return $new_text;
}

Koden ovan fungerar med text utan radbrytningar, men blir helt fel när texten innehåller "\n" här och var (prova själva med en provtext, ta nått längre från aftonbladet.se eller nått bara). Bäst vore även om helt tomma rader får ">" i sig, vilket inte sker med ovanstående.

bivald 2007-01-31 20:56

Hur menar du blir fel? En snabbläsning av koden ovan så verkar det som att blankrader kommer ignoreras i räkning - alltså kan dem finnas överallt. Kanske bättre att antingen ta bort alla radbrytningar (alt. ta bort alla radbrytningar som inte är dubbla)?

Mickee 2007-02-08 23:36

fick du ordning på det? snabba tankar: hinner bara titta lite snabbt men du borde köra en preg_replace för annars lär texten du lägger in bli mysko med mellanrummen och radbrytena. Sen måste du känna av om detä r en tom rad (ifsats..) och du hålla räkningen på bokstäverna så om ett ord får plats eller inte plats på en rad...

koala 2007-02-09 04:12

Annars kan du säkert använda wordwrap med samma resultat:

Kod:

function text2rows($text, $chars_per_row)
{
 return wordwrap($text, $chars_per_row, "\n> ");
}


koala 2007-02-09 04:30

Eller gör om din ursprungliga funktion en aning:

Kod:

function text2rows($text, $chars_per_row)
{
 //$text = preg_replace("/\s+/", " ", $text); // om du vill bli av med överflödiga whitespaces
 $text = preg_replace("/[\r\n]+/", " ", $text); // om du vill bli av med radbrytningar
 $words = explode(' ', $text);
 $i = 0;
 $row = array();

 foreach ($words as $t)
 {
  $row[$i] .= $t.' ';
  if (strlen($row[$i]) > $chars_per_row)
    $i++; // ny rad.
 }

 foreach ($row AS $t)
  $new_text .= "> ".trim($t)."\n";

 return $new_text;
}



Alla tider är GMT +2. Klockan är nu 05:38.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson