Statische string functies (PHP Compacten)

Door Storeman storeman, 15 jaar geleden, 2.039x bekeken

Sommige functies voor string bewerkening ontbreken gewoon. Ik heb een aantal handige functies geschreven om strings te manipuleren. Vooral met het oog op tags, erg handig.

De classe is een classe voor de verzameling. Het classe object is niet nodig om de functies te laten werken. Echter zijn er verwijzingen in de class naar zichzelf, om dit te laten werken, deze ook aanpassen

Ik zal kort de functies bespreken:

match_by_tag
function match_by_tag($strText, $strTagOpen, $strTagClose, &$arrMatch, $iLimit = null)

Match een tag, in een stringtext. Deze tag begint met een string (<) en eindigt met een string (>). De gevonden posities worden in een referentiele array opgeslagen.

Elke match voegt een array toe aan de $arrMatch, elke subarray bestaat uit de volgende onderdelen: beginpostie van de string, eindpositie van de string, totale lengte van de tag, totale lengte van de tag zonder tagopen en tag close.

convert_by_tag
Deze werkt ongeveer hetzelfde als match_by_tag, echter kan er gelijk aangegeven worden of er wat met de data tussen de tag open en tag-close gedaan moet worden. $strAction kan de volgende waarden bevatten: STRIP, HTMLENTITIES, HTML_ENTITIES_DECODE

Welke respectievelijk zorgt voor verwijderen, html omzetten naar hun string versie (< wordt &bd; (ofzo)), en string html omzetten naar hun tekens.

strip_out_and_save_by_tag

Soms wil je bepaalde data veilig stellen voordat je bewerkingen uit gaat voeren. Met deze functie wordt de data tussen strTagOpen en strTagClose vervangen door een unieke tag (die niet in de string voorkomt). De unieke tag komt op de plek van de gematchte string, de string wordt opgeslagen in de reference array.

$arrData[iets van een unieke key] = 'string gematched door twee quotes';

insert_saved_by_tag

De functie maakt de voorgaande functie ongedaan. Het is in feite niet meer dan een string_replace.

first_position
Soms wil je weten welke string er als eerste voorkomt uit een set. Hiervoor heb ik first_position ontwikkeld. Deze geeft een array terug met de positie van de string op index 0. En de gevonden string op index 1.

last_position
Als voorgaande, maar wordt het laatste voorkomen van een string gezocht.

compact_php
Misschien wel de mooiste van allemaal. Deze functie haalt alle spaties, enters, tabs en commentaar uit je code. Hierdoor wordt je code niet alleen compacter (mijn ervaring ongeveer 50%), maar ook wat minder toegankelijk. Als je aan het debuggen gaat, is het niet handig, daar alles op enkele regels staat.

De functie heeft wel even tijd nodig (ongeveer 30 seconden om 300.000 karakters te verwerken (output: 170.000 karakters).

compact_xml
Niet zo heel nuttig, is ook niet ver doorontwikkeld.

generate_unique_tag

Deze functie genereert een unieke string voor een bepaalde tekst. Er kan een tekst meegegeven worden waarin de tag niet voor mag komen of een array. In geval van de array wordt er gekeken naar de keys.


Nou, dat was dat, nu de code!

Updates
18-07-2007: Offset toegevoegd aan match_by_tag en convert_by_tag

Voorbeeld: http://phphulp.storeman.nl/static_string/voorbeeld.php

Gesponsorde koppelingen

PHP script bestanden

  1. statische-string-functies-php-compacten

 

Er zijn 7 reacties op 'Statische string functies php compacten'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Niels Janssen
Niels Janssen
15 jaar geleden
 
0 +1 -0 -1
Kijk kijk, dit soort scripts moeten we vaker hebben :)
Storeman storeman
storeman storeman
15 jaar geleden
 
0 +1 -0 -1
thnx. Ik ben er ook wel even druk mee geweest. Ik ben blij dat het gewaardeerd wordt :).


15 jaar geleden
 
0 +1 -0 -1
mooi script !
Timmy
timmy
15 jaar geleden
 
0 +1 -0 -1
wooow zit vast veel tijd in,

heel er mooi script
Arend a
Arend a
15 jaar geleden
 
0 +1 -0 -1
Jammer dat je niet regular expressions hebt bestudeerd voor je hier aan begon.

Equivalenten voor bijvoorbeeld je eerste twee functies:
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
<?php
    /**
     * Returns the start and endpostion of each matched set. Array(Array(iStartpos, iEndPos, $iTotalLength, $iInternalLength), Array(iStartpos, iEndpos, $iTotalLength, $iInternalLength))
     *
     * @param string $strText
     * @param string $strTagOpen
     * @param string $strTagClose
     * @param array $arrMatch
     */


        function match_by_tag ($strText, $strTagOpen, $strTagClose) {
            preg_match_all($strTagOpen . "(.*?)" . $strTagClose, $strText, $matches, PREG_OFFSET_CAPTURE);
            print_r($matches);
            // Geeft de positie en inhoud van elke matchende tag terug. Gaat niet goed om met self nested tags.
            // $matches[1] bevat alles wat je wil.

        }
        
        

    /**
     * Convert a string matched by an open and close tag.
     *
     * @param string $strText
     * @param string $strTagOpen
     * @param string $strTagClose
     * @param string $strAction = Strip, HTMLENTITIES, HTML_ENTITY_DECODE
     * @return string
     */

    function convert_by_tag($strText, $strTagOpen, $strTagClose, $strAction, $blnRemoveTag = true, $iOffset = 0, $iLimit = null)
    {

            switch(strtoupper($strAction)) {
            case
'STRIP':
                    $strText = preg_replace("/(" . $strTagOpen . ")(.*?)(" . $strTagClose . ")/", '\\1\\3', $strText);
                break;
            case
'HTMLENTITIES':
                    $strText = preg_replace("/(" . $strTagOpen . ")(.*?)(" . $strTagClose . ")/e", '\\1' . htmlentities('\\2') . '\\3', $strText);
                break;
            case
'HTML_ENTITY_DECODE':
                    $strText = preg_replace("/(" . $strTagOpen . ")(.*?)(" . $strTagClose . ")/e", '\\1' . html_entity_decode('\\2') . '\\3', $strText);
                break;
        }
    }

?>
Storeman storeman
storeman storeman
15 jaar geleden
 
0 +1 -0 -1
Arend schreef op 25.07.2007 01:18:
Regular expressions zijn nog veel geschikter ;)


Tja, daar kun je over discussieren. Ik was zelf ooit ook met zoiets bezig. Er werd mij toen geadviseerd om het met strpos ed op te lossen (ik was ook met regex bezig). Toen waren er echter ook meer uitzonderingen van toepassing. (commentaar, cdata).

Er zijn meerdere wegen die naar Rome lijden :).
Klein linkje naar topic
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Arend a
Arend a
15 jaar geleden
 
0 +1 -0 -1
Regex is simpelweg een stukje sneller om het te doen. Zowel om te schrijven als om uit te voeren vermoed ik.

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

Inhoudsopgave

  1. statische-string-functies-php-compacten

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.