Kom ihåg mig?
Home Menu

Menu


Kodhjälp: text-parser för quotes

Ämnesverktyg Visningsalternativ
Oläst 2007-01-31, 15:08 #1
chrizzs avatar
chrizz chrizz är inte uppkopplad
Medlem
 
Reg.datum: Aug 2004
Inlägg: 296
chrizz chrizz är inte uppkopplad
Medlem
chrizzs avatar
 
Reg.datum: Aug 2004
Inlägg: 296
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.
chrizz är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-01-31, 20:56 #2
bivald bivald är inte uppkopplad
Medlem
 
Reg.datum: Feb 2006
Inlägg: 207
bivald bivald är inte uppkopplad
Medlem
 
Reg.datum: Feb 2006
Inlägg: 207
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)?
bivald är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-02-08, 23:36 #3
Mickees avatar
Mickee Mickee är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2006
Inlägg: 336
Mickee Mickee är inte uppkopplad
Flitig postare
Mickees avatar
 
Reg.datum: Jan 2006
Inlägg: 336
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...
Mickee är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-02-09, 04:12 #4
koalas avatar
koala koala är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Sep 2004
Inlägg: 1 154
koala koala är inte uppkopplad
Har WN som tidsfördriv
koalas avatar
 
Reg.datum: Sep 2004
Inlägg: 1 154
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 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2007-02-09, 04:30 #5
koalas avatar
koala koala är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Sep 2004
Inlägg: 1 154
koala koala är inte uppkopplad
Har WN som tidsfördriv
koalas avatar
 
Reg.datum: Sep 2004
Inlägg: 1 154
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;
}
koala är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 23:23.

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