01. maj 2003 - 14:40Der er
34 kommentarer og 2 løsninger
Splitte en lang tekst - Split a text string into two columns
Hvordan spliter jeg en lang tekst i to så jeg kan præsentere en lang tekst i to kolonner. Jeg vil gerne have at teksten bliver splittet i et mellemrum.
du har en lang tekst, og du vil gerne have den splittet i to... hmm... hvis vi ser bort fra mellemrum, så kan du bruge
$str = "her er en meget lang streng jeg vil have i to dele..." $start = substr($str, 0, strlen($str)/2); slut = substr($str, strlen($str)/2, strlen($str)/2);
så har du i hvert fald delt strengen op i to... så kan vi begynde at tænke lidt over at dele det ved et mellem rum
<?php $str = "her er en meget lang streng jeg vil have i to dele..." $start = substr($str, 0, strlen($str)/2); $slut = substr($str, strlen($str)/2, strlen($str)/2);
hvis du tæller M'er og i'er i linierne ovenover vil du opdage at der er præcis lige mange. Så hvis du blot deler en tekst udfra antal-tegn risikerer du en decideret skæv opdeling. Det vil ofte gå godt, og jo større klumper teksten opdeles i jo større er chancen for en 'god' opdeling. men det kan altid gå hen og gå galt, som i linierne ovenfor.
For virkelig at opdele 'sikkert' skal hele teksten tegnes af brugerens browser i een høj kolonne og så deles efter den midterste linie. Det er det tekst-editorer gør, men det er decideret besværligt at gøre i en browser. Og det skal være brovseren. hvis brugeren ikke har den font du specificerer vil hans browser bruge en anden, der måske ikke har samme proportioner på bogstaverne.
Og udover bogstavernes forskellige bredder bliver opdelingen også påvirket af ordenes gennemsnitlige længde og af kolonnernes bredde. Hvis brugeren ændrer sin fontsize kan resultatet blive et helt andet.
Du kan komme nogenlunnde godt fra det med forslagene ovenfor. men de er ikke sikre.
<?php $wraptext = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.'; $wrapstring = ' '; $wrappoint = strrpos(substr($wraptext, 0, strlen($wraptext)/2), $wrapstring); ?> <table> <tr> <td valign="top"><?php echo substr($wraptext, 0, $wrappoint-1);?></td> <td valign="top"><?php echo substr($wraptext, $wrappoint+1);?></td> </tr> </table>
Jakoba: Der findes vel ikke nogen løsning til det problem du nævner - med mindre man vil forsøge sig med en individuel vægtning af bogstaverne - jeg forsøgte at finde en løsning i ren CSS, dog uden held.
NB: Antagelsen om at bogstaverne har en nogenlunde fornuftig fordeling på tværs af "midten" er vel heller ikke helt urealistisk - dermed mener jeg at resultatet sjældent vil blive helt dårligt!
jeg skal bruge funktionen til at lave tablen med 2 kolonner, så nyheden kommer til at ligne et avisudklip, frem for en lang bred teks, og en anelse sværere at læse.
Så det gør ikke noget om mere en halvdelen ligge i første kolonne. Heller end gerne fordel 60%/40%
<?php $wraptext = 'Bare brug den latinske brødtekst fra før!'; $wrapstring = ' '; //Hvilken karakter skal der brydes på $wrapweight = 0.55; //Hvor stor en del af teksten skal ligge i første kolonne $wrappoint = strrpos(substr($wraptext, 0, (int) ($wrapweight*strlen($wraptext))), $wrapstring); ?> <table width="100%"> <tr> <td valign="top" width="50%"><?php echo substr($wraptext, 0, $wrappoint+1);?></td> <td valign="top" width="50%"><?php echo substr($wraptext, $wrappoint+1);?></td> </tr> </table>
schaefner: Synes faktisk ikke selv det er en særlig god løsning - netop pga. det problem jakoba nævnte - det burde være muligt at løse 100% "korrekt" vha. CSS!
Et andet problem er også, at der kun kan splittes på én karakter - det ville også være oplagt eks. at splitte på '. ' - dvs. slutningen af en sætning!
Det kan også give problemer, hvis der er html-koder i den tekst man forsøger at splitte.
vitin: Jeg forstår ikke, hvad problemet kan være - jeg kan copy/paste min kodestump direkte ind i et nyt php-script og det fungerer uden problemer - og der er ikke en fejl i linien med "$wrapweight = 0.55;" hvilket leder mig til at tro, at du har lavet en fejl inden den linie.
<html> <head> <title>Untitled Document</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body bgcolor="#FFFFFF" text="#000000"> <?php $wraptext = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi.'; $wrapstring = ' '; $wrapweight = 0.55; $wrappoint = strrpos(substr($wraptext, 0, (int) ($wrapweight*strlen($wraptext))), $wrapstring); ?> <table width="100%"> <tr> <td valign="top" width="50%"><?php echo substr($wraptext, 0, $wrappoint+1);?></td> <td valign="top" width="50%"><?php echo substr($wraptext, $wrappoint+1);?></td> </tr> </table> </body> </html>
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.