/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
streng-behandling
Fra : Torben


Dato : 18-06-09 15:05

Hej venner

Jeg har en streng af varierende længde. Jeg vil gerne sikre mig at kun
maks 300 tegn bliver vist. Hvis strengen er over 300 tegn, så vil jeg
skære strengen ved det sidste punktum før de 300 tegn.

$str = strip_tags( $artikel[ 'resume' ] );
$chars = preg_split('/ ????????????????????/', $str, -1,
PREG_SPLIT_OFFSET_CAPTURE);

Jeg mangler 'patern' for punktum mellemrum og stortbogstav.

Eller er der en meget smartere måde at gribe det an på.


 
 
Michael Rasmussen (18-06-2009)
Kommentar
Fra : Michael Rasmussen


Dato : 18-06-09 22:14

On Thu, 18 Jun 2009 14:04:51 -0700 (PDT)
Torben <ringsoe@gmail.com> wrote:

> Jeg har en streng af varierende længde. Jeg vil gerne sikre mig at kun
> maks 300 tegn bliver vist. Hvis strengen er over 300 tegn, så vil jeg
> skære strengen ved det sidste punktum før de 300 tegn.
>
Hvad hvis der ikke findes et punktum i de første 300 tegn?

--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


Torben (18-06-2009)
Kommentar
Fra : Torben


Dato : 18-06-09 15:27

Michael skriver:
> Hvad hvis der ikke findes et punktum i de første 300 tegn?

Hvis der ikke er noget punktum så ... hm .... så skal den slutte med
sidste 'ord' enden de 300 tegn, efterfulgt af ...

Torben

Preben (19-06-2009)
Kommentar
Fra : Preben


Dato : 19-06-09 03:18

Torben wrote in dk.edb.internet.webdesign.serverside.php:
> Hvis der ikke er noget punktum så ... hm .... så skal den slutte med
> sidste 'ord' enden de 300 tegn, efterfulgt af ...
>
Er det kun punktum du leder efter?

$txt = 'en tekststreng som måske er længere end 300 tegn...';
$sub = substr($txt, 0, 300);
$txt = substr($sub, 0, strrpos($sub, '.')) ? $txt = substr($sub, 0,
strrpos($sub, '.')+1) : substr($sub, 0, strrpos($sub, ' '))."...";


Hvad hvis en sætning ender med (?) eller (!) og skal det evt.
efterfølges af mellemrum + stort bogstav?
(jeg er ikke god til regex, men måske noget i stil med flg.)

$txt = 'en tekststreng som måske er længere end 300 tegn...';
$sub = substr($txt, 0, 301);
$eol = array('.','?','!');
$pat = "/(\\".implode('|\\',$eol).")(?= [A-Z])/";
$split = preg_split($pat, $sub, -1, PREG_SPLIT_DELIM_CAPTURE);
if (count($split) > 1) {
   $txt = '';
   foreach ($split as $sub) {
      if (strlen($txt) + strlen($sub) <= 300) {
         $txt .= $sub;
      } else break;
   }
} else {
   $txt = substr($sub, 0, strrpos($sub, ' '))."...";
}

Måske må strengen ikke fylde mere end 300 tegn, selvom der bliver
tilføjet (...)?

--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Michael Rasmussen (19-06-2009)
Kommentar
Fra : Michael Rasmussen


Dato : 19-06-09 00:49

On Thu, 18 Jun 2009 14:26:40 -0700 (PDT)
Torben <ringsoe@gmail.com> wrote:

> Michael skriver:
> > Hvad hvis der ikke findes et punktum i de første 300 tegn?
>
> Hvis der ikke er noget punktum så ... hm .... så skal den slutte med
> sidste 'ord' enden de 300 tegn, efterfulgt af ...
>
Nedenstående burde opfylde dine betingelser. Bemærk venligst, at det er
totalt utestet, så brugen af koden er på eget ansvar!

<?php
$str = "Dette er en lille test. stopper her. og så. alligevel ikke";
$max = 40;

if (strlen($str) > $max) {
$pos = strrpos($str, '.');
if ($pos === FALSE || $pos > $max) {
$parts = preg_split('/(\w+\.)\s+/', $str, 300, PREG_SPLIT_DELIM_CAPTURE);
print_r($parts); $str = '';
foreach ($parts as $part) {
$part = ($str == '') ? $part : $part . ' ';
if (strlen($part) > $max - 3 || strlen($str) > $max - 3) {
if ($str != '') {
while (($pos = strrpos($part, '')) > $max - 3)
$part = substr($part, 0, $pos);
$str .= substr($part, 0, $pos) . '...';
break;
}
else {
if (strlen($str) > $max - 3) {
while (($pos = strrpos($str, ' ')) > $max - 3)
$str = substr($str, 0, $pos); $str .= '...';
break;
}
else {
while (($pos = strrpos($part, ' ')) > $max - 3)
$part = substr($part, 0, $pos);
$str = $part . '...';
break;
}
}
}
$tmp = $str . $part;
if (strlen($tmp) > $max) {
if ($str[strlen($str) - 1] == '.')
break;
else {
$str .= '...';
break;
}
}
$str = $tmp;
}
}
else {
$str = substr($str, 0, $pos + 1);
}
}

echo "$str\n";
?>
--
Hilsen/Regards
Michael Rasmussen
http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xE3E80917
A computer is like air conditioning: it becomes useless when you open
windows.


Bertel Lund Hansen (19-06-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 19-06-09 10:13

Torben skrev:

> $str = strip_tags( $artikel[ 'resume' ] );

$display_string=substr($str,0,300);
$pos=strpos($display_string,'.');
if ($pos==false) $pos=strpos($display_string,' ');
if ($pos!==false)
   $display_string=substr($display_string,0,$pos+1);

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Johan Holst Nielsen (19-06-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 19-06-09 10:27

Bertel Lund Hansen wrote:
> Torben skrev:
>
>> $str = strip_tags( $artikel[ 'resume' ] );
>
> $display_string=substr($str,0,300);
> $pos=strpos($display_string,'.');
> if ($pos==false) $pos=strpos($display_string,' ');
> if ($pos!==false)
>    $display_string=substr($display_string,0,$pos+1);

Øhm... du splitter ved første punktum - ellers ved første mellemrum.
Tror de andre løsninger virker bedre - ellers skal du i hvert fald have
noget strrev ind over i ovenstående.

/Johan

Birger Sørensen (19-06-2009)
Kommentar
Fra : Birger Sørensen


Dato : 19-06-09 14:54

Johan Holst Nielsen skrev:
> Bertel Lund Hansen wrote:
>> Torben skrev:
>>
>>> $str = strip_tags( $artikel[ 'resume' ] );
>>
>> $display_string=substr($str,0,300);
>> $pos=strpos($display_string,'.');
>> if ($pos==false) $pos=strpos($display_string,' ');
>> if ($pos!==false)
>>    $display_string=substr($display_string,0,$pos+1);
>
> Øhm... du splitter ved første punktum - ellers ved første mellemrum.
> Tror de andre løsninger virker bedre - ellers skal du i hvert fald have
> noget strrev ind over i ovenstående.
>
> /Johan

nej strpos skal være strrpos...

Birger

--
http://varmeretter.dk - billig, sund og hurtig mad
http://bbsorensen.dk



Bertel Lund Hansen (19-06-2009)
Kommentar
Fra : Bertel Lund Hansen


Dato : 19-06-09 17:30

Birger Sørensen skrev:

> nej strpos skal være strrpos...

Pokkers. Det glemte jeg da jeg blev nødt til at skrive noget af
koden igen fordi Agent har en programfejl.

--
Bertel
http://bertel.lundhansen.dk/         FIDUSO: http://fiduso.dk/

Johan Holst Nielsen (19-06-2009)
Kommentar
Fra : Johan Holst Nielsen


Dato : 19-06-09 17:56

Birger Sørensen wrote:
> Johan Holst Nielsen skrev:
>> Bertel Lund Hansen wrote:
>>> Torben skrev:
>>>
>>>> $str = strip_tags( $artikel[ 'resume' ] );
>>>
>>> $display_string=substr($str,0,300);
>>> $pos=strpos($display_string,'.');
>>> if ($pos==false) $pos=strpos($display_string,' ');
>>> if ($pos!==false)
>>> $display_string=substr($display_string,0,$pos+1);
>>
>> Øhm... du splitter ved første punktum - ellers ved første mellemrum.
>> Tror de andre løsninger virker bedre - ellers skal du i hvert fald have
>> noget strrev ind over i ovenstående.
>>
>> /Johan
>
> nej strpos skal være strrpos...

;) Yeah - det var også en mulighed.

/Johan

Torben (19-06-2009)
Kommentar
Fra : Torben


Dato : 19-06-09 06:12

> Michael Rasmussen <m...@miras.org> wrote:


> Nedenstående burde opfylde dine betingelser. Bemærk venligst, at det er
> totalt utestet, så brugen af koden er på eget ansvar!

Glimrende! Koden fungerer 'næsten'... Der er rigtignok som Preben
skriver tilfælde, hvor også ?, ! kan være afslutning fremfor .
(punktum).

Dertil kommer at kr. efterfulgt af et tal skal ikke splitte
tekststrengen. Generelt er det vel kun hvor . ? eller ! efterfølges af
et stort bogstav, der skal splitte.

Jeg ved jeg er ude i noget der får slev de mere drevne kodenørder til
at bryde grædende sammen. Jeg har det på samme måde. Og især når
regulær expressions skal match danske tegn også.

>         $parts = preg_split('/(\w+\.)\s+/', $str, 300, PREG_SPLIT_DELIM_CAPTURE);

Hm... hvis jeg så lykkes med at matche (punktum mellemrum og stort
bogstav ikke tal) så ryger jeg vel ind i det problem at den splitter
strengen forkert...?

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste