linewrap functie

Door Toby hinloopen, 17 jaar geleden, 4.412x bekeken

Een functie voor het afsnijden van een regel zodat deze nooit langer dan een bepaald aantal tekens is. De functie zal afsnijden bij het laatste woord, indien mogelijk.

Handig voor... van alles.

Het is een superkleine code, maar je moet er maar net opkomen.

Voorbeelden:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

echo linewrap('1234567890',8); //12345...
echo linewrap('Ik hou van oliebollen',10); //Ik hou...
echo linewrap('oliebollen',9); //oliebo...
echo linewrap('oliebollen',10); //oliebollen
echo linewrap('hoi'."\n".'alles goed?',10); //hoi (string wordt afgesneden door "\n".)

?>


Dit zijn natuurlijk maar korte voorbeelden, zodat je makkelijk kan zien hoe de functie werkt. Deze functie is bedoeld voor het afsnijden van een enkele zin zodat de zin altijd binnen X aantal tekens is.

Zelf gebruik ik de functie bij een forum om de topic-titels af te snijden tot een limiet van 60 tekens. Wanneer je de muis op de topic-titel houdt, zie je de volledige titel.

Gesponsorde koppelingen

PHP script bestanden

  1. linewrap-functie

 

Er zijn 10 reacties op 'Linewrap functie'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Michael -
Michael -
17 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
function inkorten($string, $tekens)
{

    $aantal = strlen($string);
    if($aantal > $tekens)
    {

        $string = substr($string, 0, $tekens) . '..';
    }

return $string;
}

?>

Zo kan 't ook.
Richard van Velzen
Richard van Velzen
17 jaar geleden
 
0 +1 -0 -1
Zo hoor je array_shift niet te gebruiken, die verwacht een array by reference.

Een veel interessantere oplossing is als volgt:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
function linewrap($txt, $limit) {
    return ($limit > 3 || $limit = 4) &&
        preg_match('{^.{0,' . ($limit - 3) . '}}',
                $txt = trim($txt), $m) ?
            trim($m[0]) . '...' :
            $txt;
}[
/code]
Jesper Diovo
Jesper Diovo
17 jaar geleden
 
0 +1 -0 -1
@Richard: Doe het dan wel met een == i.p.v. = op regel 3, anders komt daar altijd true uit.
Richard van Velzen
Richard van Velzen
17 jaar geleden
 
0 +1 -0 -1
Dat is ook de bedoeling... Alles wat er staat is precies zoals het is bedoeld.
Toby hinloopen
toby hinloopen
17 jaar geleden
 
0 +1 -0 -1
@turmin:
nee. Die van mij snijdt af bij het laatste woord, die van jou altijd bij het limiet. Ook is die van jou 2 tekens langer dan het limiet.

@Richard van velzen:
Ook goed.


17 jaar geleden
 
0 +1 -0 -1
@Richard
WTF maakt het uit; je doet niks meer met die array dus waarom zou je je druk maken hoe array_shift ermee omgaat.
Richard van Velzen
Richard van Velzen
17 jaar geleden
 
0 +1 -0 -1
Nee, stel je voor, waarom zou ik ook een dikke vette melding van PHP krijgen? Ooit je error reporting level op E_ALL|E_STRICT gezet? Vast niet, dan zou je wel weten waarom dat niet hoort.
Toby hinloopen
toby hinloopen
17 jaar geleden
 
0 +1 -0 -1
@Riichard:
geeft-ie een error dan?

Volgens mij niet... als-ie wel een error zou geven had ik het anders gemaakt.

*zet errors aan*

geen errors @ linux ubuntu @ php 5.3.0 @ E_ALL

maar het zal me niet verbazen als-ie in de toekomst wel een error zou geven, of bij andere versies.
Richard van Velzen
Richard van Velzen
17 jaar geleden
 
0 +1 -0 -1
Vergeet E_STRICT niet, die zit niet bij E_ALL in ;)

error_reporting(E_ALL | E_STRICT) geeft bij jouw functie voor iedere aanroep een melding:

Strict Standards: Only variables should be passed by reference in /home/richard/public_html/tests/linewrap_test.php on line 6
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Toby hinloopen
toby hinloopen
17 jaar geleden
 
0 +1 -0 -1
@Richard
Dat wisten we hier niet. Wat voor "ALL" is het als niet ALLes erin zit? Echt php-logica weer...

Ach ja. In PHP zet hebben ze deze logica rechtgezet, want daar is E_ALL tenminste wel E_ALL met ALLES.

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. linewrap-functie

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.