/ 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
Vis kun X antal karakterer.
Fra : Rigor Mortis


Dato : 31-05-04 20:17

http://mbn.dk/?aid=44 har jeg fundet en function:

function cut_text($str, $size=5) {

settype($size, "integer");

$str = preg_replace("/^(.{".$size."}).*$/", "1...", $str);

return $str;

}

Det var så vist meningen at:

"hej med dig"

skulle blive til:

"Hej m..."

Men istedet bliver det til:

"1..."

Hvad går galt?
--
Rigor



 
 
Thomas Lindgaard (31-05-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 31-05-04 21:00

On Mon, 31 May 2004 21:17:09 +0200, Rigor Mortis wrote:

> function cut_text($str, $size=5) {
>
> settype($size, "integer");
>
> $str = preg_replace("/^(.{".$size."}).*$/", "1...", $str);
>
> return $str;
>
> }
>
> Det var så vist meningen at:
>
> "hej med dig"
>
> skulle blive til:
>
> "Hej m..."
>
> Men istedet bliver det til:
>
> "1..."

Det dér ettal skulle vist være en back reference - så der mangler \\
foran, altså:

preg_replace("/^(.{".$size."}).*$/", "\\1...", $str);

Egentlig tror jeg at funktionen kan skrives lidt simplere:

function cut_text($str, $size=5)
{
return preg_replace("/^(.{".$size."}).*$/", "\\1...", $str);
}

Utestet - men jeg skulle mene at resultatet vil blive det samme.

Mvh.
/Thomas

Johan Holst Nielsen (01-06-2004)
Kommentar
Fra : Johan Holst Nielsen


Dato : 01-06-04 09:54

Thomas Lindgaard wrote:
> On Mon, 31 May 2004 21:17:09 +0200, Rigor Mortis wrote:
>
>
>> function cut_text($str, $size=5) {
>>
>> settype($size, "integer");
>>
>> $str = preg_replace("/^(.{".$size."}).*$/", "1...", $str);
>>
>> return $str;
>>
>> }
>>
>>Det var så vist meningen at:
>>
>>"hej med dig"
>>
>>skulle blive til:
>>
>>"Hej m..."
>>
>>Men istedet bliver det til:
>>
>>"1..."
>
>
> Det dér ettal skulle vist være en back reference - så der mangler \\
> foran, altså:
>
> preg_replace("/^(.{".$size."}).*$/", "\\1...", $str);
>
> Egentlig tror jeg at funktionen kan skrives lidt simplere:
>
> function cut_text($str, $size=5)
> {
> return preg_replace("/^(.{".$size."}).*$/", "\\1...", $str);
> }
>
> Utestet - men jeg skulle mene at resultatet vil blive det samme.

Kan ikke lige se nogen grund til det skal være reg. exp. i dette
tilfælde? Hvorfor ikke blot

function cut_text($str,$size=5) {
return substr($str,0,$size)."...";
}

?

mvh
Johan


Lars Olesen (01-06-2004)
Kommentar
Fra : Lars Olesen


Dato : 01-06-04 11:34

Johan Holst Nielsen wrote:

> Kan ikke lige se nogen grund til det skal være reg. exp. i dette
> tilfælde? Hvorfor ikke blot
>
> function cut_text($str,$size=5) {
> return substr($str,0,$size)."...";
> }

Så kan jeg ikke se, hvorfor du ikke bare bruger:

substr("Hej med dig", 5);

Altså bare brug php's egen funktion til at gøre det med :)

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Thomas Lindgaard (01-06-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 01-06-04 14:54

On Tue, 01 Jun 2004 12:33:46 +0200, Lars Olesen wrote:

>> function cut_text($str,$size=5) {
>> return substr($str,0,$size)."...";
>> }
>
> Så kan jeg ikke se, hvorfor du ikke bare bruger:
>
> substr("Hej med dig", 5);
>
> Altså bare brug php's egen funktion til at gøre det med :)

Hejsa

Det skal naturligvis bare være en substr-ting frem for noget reg.exp.
(jeg havde vist lige set mig blind...) - men

substr($text, $size);

er forkert: Det returnerer fra $size'te bogstav og frem. Det rigtige må
være at bruge Johans funktion.

Mvh.
/Thomas

Lars Olesen (01-06-2004)
Kommentar
Fra : Lars Olesen


Dato : 01-06-04 22:52

Thomas Lindgaard wrote:

> Det skal naturligvis bare være en substr-ting frem for noget reg.exp.
> (jeg havde vist lige set mig blind...) - men
>
> substr($text, $size);
>
> er forkert: Det returnerer fra $size'te bogstav og frem. Det rigtige må
> være at bruge Johans funktion.

Jep, naturligvis. Skulle være substr("hej med dig", 0,5) :) Men pointen
er, at det ikke bør smides i en funktion, men man bør bruge PHP's
funktion direkte!

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Thomas Lindgaard (02-06-2004)
Kommentar
Fra : Thomas Lindgaard


Dato : 02-06-04 00:09

On Tue, 01 Jun 2004 23:52:01 +0200, Lars Olesen wrote:

> Men pointen er, at det ikke bør smides i en funktion, men man bør
> bruge PHP's funktion direkte!

Ahh det var det du mente med at bruge PHP's funktion direkte.

Alt efter hvor mange gange man skal bruge funktionen så kunne der måske
være en ide i at bruge cut_size - den sætter jo de afsluttende ... på -
og så er man lidt fremtidssikret så fremt i fald man senere skulle få
lyst til at vise 6 tegn frem for kun 5 :)

Mvh.
/Thomas

Lars Olesen (02-06-2004)
Kommentar
Fra : Lars Olesen


Dato : 02-06-04 05:59

Thomas Lindgaard wrote:

> Alt efter hvor mange gange man skal bruge funktionen så kunne der måske
> være en ide i at bruge cut_size - den sætter jo de afsluttende ... på -
> og så er man lidt fremtidssikret så fremt i fald man senere skulle få
> lyst til at vise 6 tegn frem for kun 5 :)

Du har ret :)

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Johan Holst Nielsen (02-06-2004)
Kommentar
Fra : Johan Holst Nielsen


Dato : 02-06-04 08:53

Lars Olesen wrote:

> Thomas Lindgaard wrote:
>
>> Det skal naturligvis bare være en substr-ting frem for noget reg.exp.
>> (jeg havde vist lige set mig blind...) - men
>> substr($text, $size);
>>
>> er forkert: Det returnerer fra $size'te bogstav og frem. Det rigtige må
>> være at bruge Johans funktion.
>
>
> Jep, naturligvis. Skulle være substr("hej med dig", 0,5) :) Men pointen
> er, at det ikke bør smides i en funktion, men man bør bruge PHP's
> funktion direkte!

Det var mere i tilfælde af han brugte funktionen 2000 steder på sit
website med den nuværende konstruktion - så kunne man vælge en replace -
som kunne få galt - eller bare lade funktionen outputte det man ønsker
på en simplere måde :)

Men enig - hvis det er i et tilfælde hvor der _kun_ er et sted dette
sker - så ser jeg ingen problemer i ikke at putte det i en funktion -
tværtimod.

mvh
Johan


Kristian Thy (01-06-2004)
Kommentar
Fra : Kristian Thy


Dato : 01-06-04 22:53

Lars Olesen uttered:
>> function cut_text($str,$size=5) {
>> return substr($str,0,$size)."...";
>> }
>
> Så kan jeg ikke se, hvorfor du ikke bare bruger:
>
> substr("Hej med dig", 5);
>
> Altså bare brug php's egen funktion til at gøre det med :)

Fordi OP gerne vil have "..." sat på strengen hvis den er afkortet.

\\kristian
--
"The brain is a wonderful organ. It starts working the moment you get
up in the morning and does not stop until you get into the office."
--Robert Frost

Lars Olesen (02-06-2004)
Kommentar
Fra : Lars Olesen


Dato : 02-06-04 06:00

Kristian Thy wrote:

> Fordi OP gerne vil have "..." sat på strengen hvis den er afkortet.

Jep, det er rigtigt, men det kommer nu stadig an på, hvor mange gange
funktionen skal bruges, synes jeg :)

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Jacob Atzen (02-06-2004)
Kommentar
Fra : Jacob Atzen


Dato : 02-06-04 09:44

Lars Olesen <lsolesen@hotmail.com> writes:

> Jep, det er rigtigt, men det kommer nu stadig an på, hvor mange gange
> funktionen skal bruges, synes jeg :)

Ikke enig. Det kommer an på læsbarheden af koden. Hvis koden bliver
mere læsbar af at smide noget i en funktion så gør det, også selvom
det er trivielt, det der bliver flyttet over i funktionen. Fordelen
ved at gøre det på denne måde er, at du kan navngive funktionen til at
afspejle præcis, hvad det er der foregår.

Martin Fowlers "Refactoring" har rigtig mange gode pointer om lige
netop denne problemstilling.

--
Med venlig hilsen
- Jacob Atzen

Lars Olesen (02-06-2004)
Kommentar
Fra : Lars Olesen


Dato : 02-06-04 09:58

Jacob Atzen wrote:

>>Jep, det er rigtigt, men det kommer nu stadig an på, hvor mange gange
>>funktionen skal bruges, synes jeg :)
>
> Ikke enig. Det kommer an på læsbarheden af koden. Hvis koden bliver
> mere læsbar af at smide noget i en funktion så gør det, også selvom
> det er trivielt, det der bliver flyttet over i funktionen. Fordelen
> ved at gøre det på denne måde er, at du kan navngive funktionen til at
> afspejle præcis, hvad det er der foregår.

Well, det er naturligvis en god pointe! Må nok hellere tage i Fowlers bog :)

--
Lars Olesen
Kan det gøres bedre? Struktur, navigation og brugervenlighed!
Betingelser findes på <http://www.fodboldenslegestue.dk>
Forslag afleveres inden 1. juli 2004

Martin Geisler (01-06-2004)
Kommentar
Fra : Martin Geisler


Dato : 01-06-04 10:44

"Rigor Mortis" <rigor@12mail.dk> writes:

> På http://mbn.dk/?aid=44 har jeg fundet en function:
>
> function cut_text($str, $size=5) {
>
> settype($size, "integer");
>
> $str = preg_replace("/^(.{".$size."}).*$/", "1...", $str);
>
> return $str;
>
> }

Hvorfor dog gøre det ved hjælp af regulære udtryk når en simpel
substr() vil virke lige så godt og hurtigere? En mere simpel måde at
gøre det på kunne være:

<?php
function cut_text($str, $size = 5) {
if (strlen($str) > $size)
return substr($str, 0, $size-3) . '...';
else
return $str;
}
?>

Så bliver resultatet altid en streng med højst $size tegn, hvoraf de
sidste tre er '...' hvis strengen var for lang.

--
Martin Geisler My GnuPG Key: 0xF7F6B57B

PHP EXIF Library | PhpWeather | PhpShell
http://pel.sf.net/ | http://phpweather.net/ | http://gimpster.com/
Read/write EXIF data | Show current weather | A shell in a browser

Rigor Mortis (02-06-2004)
Kommentar
Fra : Rigor Mortis


Dato : 02-06-04 10:40

"Martin Geisler" <gimpster@gimpster.com> skrev i en meddelelse
news:87iseb3955.fsf@gimpster.sg.bnaa.dk...
> Hvorfor dog gøre det ved hjælp af regulære udtryk når en simpel
> substr() vil virke lige så godt og hurtigere? En mere simpel måde at
> gøre det på kunne være:
>
> <?php
> function cut_text($str, $size = 5) {
> if (strlen($str) > $size)
> return substr($str, 0, $size-3) . '...';
> else
> return $str;
> }
> ?>
>
> Så bliver resultatet altid en streng med højst $size tegn, hvoraf de
> sidste tre er '...' hvis strengen var for lang.
>


Tak for de mange ideer der er kommet i denne tråd.

Det blev denne jeg bruger. Og det fungerer godt.
--
Rigor



Ulrik Nielsen (02-06-2004)
Kommentar
Fra : Ulrik Nielsen


Dato : 02-06-04 11:35

Rigor Mortis wrote:
>
> Tak for de mange ideer der er kommet i denne tråd.
>
> Det blev denne jeg bruger. Og det fungerer godt.

selv om du siger at det er forsent, så kommer der liiige en til:


function sub_string($text, $maxTextLenght=128, $pad='...') {
$aspace=" ";
if(strlen($text) > $maxTextLenght ) {
$text = substr(trim($text),0,$maxTextLenght);
$text = substr($text,0,strlen($text)-strpos(strrev($text),$aspace));
$text = $text.$pad;
}
return $text;
}

Denne funktion sørger for ikke at "klippe" ord over.. hviklet godt kan
være en fordel... ;)

--
>> ulrik nielsen
excuse of the day : descramble code needed from software company
from bofh : http://www.cs.wisc.edu/~ballard/bofh/

Jeppe Uhd (02-06-2004)
Kommentar
Fra : Jeppe Uhd


Dato : 02-06-04 11:41

Rigor Mortis wrote:
> "Martin Geisler" <gimpster@gimpster.com> skrev i en meddelelse
> news:87iseb3955.fsf@gimpster.sg.bnaa.dk...
>> Hvorfor dog gøre det ved hjælp af regulære udtryk når en simpel
>> substr() vil virke lige så godt og hurtigere? En mere simpel måde at
>> gøre det på kunne være:
>>
>> <?php
>> function cut_text($str, $size = 5) {
>> if (strlen($str) > $size)
>> return substr($str, 0, $size-3) . '...';
>> else
>> return $str;
>> }
>>>
>>
>> Så bliver resultatet altid en streng med højst $size tegn, hvoraf de
>> sidste tre er '...' hvis strengen var for lang.
>>
>
>
> Tak for de mange ideer der er kommet i denne tråd.
>
> Det blev denne jeg bruger. Og det fungerer godt.

Og man kunne nok argumentere for en ternary operator...

function cut_text($str,$size=5)
{
return ((strlen($str)>$size)?(substr($str,0,$size-3).'...'):$str);
}

--
MVH Jeppe Uhd - NX http://nx.dk
Webhosting for nørder og andet godtfolk



Jacob Atzen (02-06-2004)
Kommentar
Fra : Jacob Atzen


Dato : 02-06-04 14:45

"Jeppe Uhd" <knewsnospam@nx.dk> writes:

> Og man kunne nok argumentere for en ternary operator...
>
> function cut_text($str,$size=5)
> {
> return ((strlen($str)>$size)?(substr($str,0,$size-3).'...'):$str);
> }

Så er man i alt fald sikker på det er ulæseligt

--
Med venlig hilsen
- Jacob Atzen

Jonas Delfs (02-06-2004)
Kommentar
Fra : Jonas Delfs


Dato : 02-06-04 20:33

"Rigor Mortis" <rigor@12mail.dk> skrev i en meddelelse
news:40bb8607$0$253$edfadb0f@dread16.news.tele.dk...
> På http://mbn.dk/?aid=44 har jeg fundet en function:
>
[snip]
>
> Det var så vist meningen at:
>
> "hej med dig"
>
> skulle blive til:
>
> "Hej m..."

Det lader til i har fundet en løsning på problemet, men da tekster man
ønsker beskåret tit kommer fra en db, skrev jeg engang dette:
http://delfs.dk/tricks.start.php
Måske du kan bruge det til noget...

--
Mvh. Jonas Delfs, http://delfs.dk



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408527
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste