substr() tot na img tag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior, Medior and Junior SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Veldhoven Vacature ID: 12696 Introductie Our client is the world's leading provider of lithography systems for the semiconductor industry, manufacturing complex machines that are critical to the production of integrated circuits or chips. Our purpose is “unlocking the potential of people and society by pushing technology to new limits”. We do this guided by the principles “Challenge”, “Collaborate” and “Care”. Wat verwachten we van jou? SAP Certified Application Associate - SAP HANA Cloud Modeling (training and/or certification) Bachelor degree or higher Excellent understanding of SAP HANA (2.0 / Cloud), Data Modelling and writing

Bekijk vacature »

Dimitri Van Reeth

Dimitri Van Reeth

06/08/2012 23:27:17
Quote Anchor link
Hallo iedereen,

Ik wil een verkorte versie weergeven van de laatste reactie.

Maar nu omdat ik gebruik maak van ckeditor (dus met smiley's of URL) dan knipt hij de helft van de html tag weg...
Hoe kan ik ervoor zorgen dat de substr alleen werkt voor het aantal characters zonder de HTML tags?

Situatie nu:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<?php $laatste_reactie = 'Dit is een test <img src="images/smiley" /> ';
echo(substr($laatste_reactie,30)); ?>


Situatie nu resultaat:
Dit is een test <img src="image

Wat ik wil bereiken:
Dit is een test <img src="images/smiley" /> -- waarbij de img tag als 1 character telt.

Alvast bedankt!
Gewijzigd op 06/08/2012 23:28:23 door Dimitri Van Reeth
 
PHP hulp

PHP hulp

22/12/2024 15:56:58
 
Frank WD

Frank WD

06/08/2012 23:41:49
Quote Anchor link
Kijk eens na een van deze functie's.

Klik 1
Klik 2
Klik 3

Denk dat 1 meer is na waar je opzoek bent.
Verder niet echt gekeken nog in de code.
 
Dimitri Van Reeth

Dimitri Van Reeth

07/08/2012 12:52:38
Quote Anchor link
Ik heb eens naar die 1ste link gekeken maar snap niet echt hoe ik deze moet gebruiken... Het is geschreven in Python, dus werkt dit wel met php? ben niet echt bekent met python daarom.. & moet ik dat bestand dan gewoon includen?

bedankt voor je hulp!

Toevoeging op 07/08/2012 13:15:20:

Ik heb ook de 3de link proberen te gebruiken maar dit werkt ook niet...

Toevoeging op 07/08/2012 13:49:48:

Even om het samen te vatten wat er niet werkt:

De functie zelf:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
/**
 * Functie om een string in te korten
 *
 * Deze funtie kort een string in en houd daarbij rekening met html tags.
 * Html tags nemen geen ruimte in in de gereturnde string en ze worden
 * ook niet afgebroken als de maximale lengte bereikt is. De lengte van
 * de ingekorte string en de string waarmee die beëindigt wordt kan zelf
 * worden bepaald.
 *
 * @author Rik Veenboer
 * @param  string $data      de string die verkort moet worden
 * @param  int    $length    de lengte die de string moet krijgen
 * @param  string $endString de string waarmee de verkorte string beëindigt wordt
 * @return string            een string met de ingekorte $data
**/

function shorten($data, $length, $endString = '...') {
    // De regexes voor de open en close html tags
    $regex = array(
        'open' => '/^\<[ ]*([a-z]+)[ ]*(?:[a-z]*[ ]*\=[ ]*\"[^\"\'<>]*\")*[ ]*(\/?)[ ]*\>$/',
        'close' => '/\<[ ]*\/[ ]*%s+[ ]*\>/s'
    );
    $short = '';
    // De lengte van de nieuwe string is inclusief de puntjes op het einde behalve als de invoer al kort genoeg is
    $isShortString = strlen(strip_tags($data)) <= $length;
    $length -= $isShortString ? 0 : strlen($endString);
    $free = $length;
    // Elk teken afgaan totdat ze op zijn of totdat er geen meer nodig zijn
    for ($i = 0; $i < strlen($data) && $free > 0; $i++) {
        // Controleren of het huidige teken een < is en of er ook nog een > achter staat
        if ($data{$i} == '<' && ($pos = strpos($data, '>', $i + 1)) !== false) {
            // De open tag in een string zetten
            $open = substr($data, $i, ($pos - $i + 1));
            // Controleren of de opentag geldig is
            if (preg_match($regex['open'], $open, $match)) {
                // Tags waarvan geen sluit tag bestaat detecteren
                if (isset($match[2]) && $match[2] == '/') {
                    $short .= $open;
                    // De pointer voorbij deze tag zetten en verder gaan
                    $i += strlen($open) - 1;
                    continue;
                }

                // Sluittag opzoeken
                if (preg_match(sprintf($regex['close'], $match[1]), substr($data, $pos), $match)) {
                    $close = $match[0];
                    // De waarde tussen de open en sluit tag vandaan halen en apart parsen
                    $value = shorten(substr($data, $pos + 1, strpos($data, $close, $pos) - $pos - 1), $free, '');
                    $free -= strlen($value);
                    // Het geheel toevoegen aan de verkorte string
                    $short .= $open . $value . $close;
                    // Pointer voorbij de sluit tag zetten
                    $i += strlen($open . $value . $close) - 1;
                }
else {
                    // Als er geen geldige sluit tag is gevonden voegen we open tag beveiligd toe
                    $short .= htmlentities($open, ENT_QUOTES);
                    $i += strlen($open) - 1;
                }

                // Ga verder met het volgende teken
                continue;
            }
        }

        // Het huidige teken beveiligd toevoegen
        $short .= htmlentities($data{$i}, ENT_QUOTES);
        $free--;
    }

    // Alleen puntjes toevoegen als de invoer langer dan de opgegeven lengte is
    return $short;
}

?>


Code waarin de functie word aangeroepen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
//Shortens comment if it's longer than the maximum allowed characters
            if(strlen(strip_tags($comment)) > 100){
            $comment = shorten($comment, 100).'...';
            }


Output:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<h6><b>Dimitri</b></h6>
            <p>We gaan eens testen of dit ook lukt voor strings die langer zijn dan 80 characters. &lt;img alt=&quot;smi</p>...
<a href="fullnews.php?newsid=7#comment">Read more</a>
Gewijzigd op 07/08/2012 14:01:09 door Dimitri Van Reeth
 



Overzicht Reageren

 
 

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.