Extension:ParserFunctions/String functions/de

Die Erweiterung StringFunctions bietet einen zusätzlichen Satz Parser-Funktionen, welche Zeichenketten bearbeiten. Die Version 2.0 behebt Probleme mit &lt;nowiki> und lässt die Notwendigkeit entfallen, auf dem Server die PHP-Erweiterung mbstring installiert zu haben.

Funktionen
Dieses Modul definiert die Funktionen: len, pos, rpos, sub, pad, replace, explode, urlencode und urldecode</tt>.

Alle diese Funktionen laufen mit der Zeitkomplexität $$\mathcal{O}(n)$$, was vor DoS-Attacken schützt.


 * 1) Zur Vorbeugung von Missbrauch unterliegen einige Parameter Begrenzungen. Siehe Abschnitt Begrenzungen unten.
 * 2) Für Funktionen, die unerwünschterweise Groß- und Kleinschreibung unterscheiden, kann das Magic Word ausdruck verwendet werden.

#len:
Die Funktion #len gibt die Länge der eingegebenen Zeichenkette aus. Beispiel:


 * → 8


 * Leerzeichen am Ende werden nicht mitgezählt. Beispiel:  → 8
 * Zeichen werden ordnungsgemäß gezählt, auch wenn sie in UTF-8 mehrere Bytes einnehmen. Beispiel:  → 8.
 * Tags wie &lt;nowiki> werden samt Inhalt nicht mitgezählt, weil sie vor dem Parser versteckt sind. Beispiel:  → 4.

#pos:
Die Funktion #pos gibt die Position eines gegebenen Suchbegriffs innerhalb der Zeichenkette aus.



Der Parameter Suchbeginn ist optional und teilt der Funktion mit, ab welcher Stelle gesucht werden soll.

Wird der Suchbegriff gefunden, so wird die Stellennummer des ersten Zeichens seines ersten Auftauchens innerhalb der Zeichenkette ausgegeben. Die erste Stelle wird dabei mit 0 nummeriert. Wird der Suchbegriff nicht gefunden, wird nichts ausgegeben. Damit ist die Funktion auch ideal für den Test, ob die Zeichenkette den Suchbegriff überhaupt enthält.

Beispiele:
 * → 9
 * → 24


 * Diese Funktion unterscheidet Groß- und Kleinschreibung.
 * Die maximale Länge des Suchbegriffes ist in $wgStringFunctionsLimitSearch festgelegt.
 * Zeichen werden ordnungsgemäß gezählt, auch wenn sie in UTF-8 mehrere Bytes einnehmen. Beispiel:  → 4.
 * Wie auch bei #len werden &lt;nowiki> und andere Wiki-Tags mitsamt ihrem Inhalt als eine einzige Stelle gezählt:  → 1.

#rpos:
The #rpos function returns the last position of a given search term within the string. The syntax is:

If the search term is found, the return value is a zero-based integer of its last position within the string. If the search term is not found, the function → -1.

Tip: When using this to search for the last delimiter, add +1 to the result to retrieve position after the last delimiter. This also works when the delimiter is not found, because "-1 + 1" is zero, which is the beginning of the given value.


 * Diese Funktion unterscheidet Groß- und Kleinschreibung.
 * Die maximale Länge des Suchbegriffes ist in $wgStringFunctionsLimitSearch festgelegt.
 * Zeichen werden ordnungsgemäß gezählt, auch wenn sie in UTF-8 mehrere Bytes einnehmen. Beispiel:  → 4.
 * Wie auch bei #len werden &lt;nowiki> und andere Wiki-Tags mitsamt ihrem Inhalt als eine einzige Stelle gezählt:  → 1.

#sub:
The #sub function returns a substring from the given string. The syntax is:

The start parameter, if positive (or zero), specifies a zero-based index of the first character to be returned. Example:  → cream</tt> → Ice</tt>.

If the start parameter is negative, it specifies how many characters from the end should be returned. Example:  → eam</tt>.

The length parameter, if present and positive, specifies the maximum length of the returned string. Example:  → cre</tt>.

If the length parameter is negative, it specifies how many characters will be omitted from the end of the string. Example:  → cr</tt>.


 * If the length parameter is zero, it is not used for truncation at all.
 * Example:  → cream</tt>,   → Ice</tt>
 * If start denotes a position beyond the truncation from the end by negative length parameter, an empty string will be returned.
 * Example:  → an empty string.
 * This function is safe with utf-8 multibyte characters. Example:  → žlina</tt>.
 * As with #len, &lt;nowiki> and other tag extensions are treated as having a length of 1 for the purposes of character position. Example:  → test</tt>.
 * If your string contains a colon ("like:this"), removing just the text that precedes the colon has the effect of putting the remaining text indented on a new line. i.e..

#pad:
The #pad function returns the given string extended to a given width. The syntax is:

The length parameter specifies the desired length of the returned string.

The padstring parameter, if specified, is used to fill the missing space. It may be a single character, which will be used as many times as necessary, or a string, which will be concatenated as many times as necessary and then trimmed to the required length. Example:  → xXxXxXxIce</tt>.

If the padstring is not specified, spaces are used for padding.

The direction parameter, if specified, can be one of these values:
 * left</tt> - the padding will be on the left side of the string. Example:  → xxIce</tt>.
 * right</tt> - the padding will be on the right side of the string. Example:  → Icexx</tt>.
 * center</tt> - the string will be centered in the returned string. Example:  → <tt>xIcex</tt>.

If the direction is not specified, the padding will be on the left side of the string.

The return value is the given string extended to length characters, using the padstring to fill the missing part(s). If the given string is already longer than length, it is neither extended nor truncated.


 * The maximum allowed value for the length is limited through the $wgStringFunctionsLimitPad global setting.
 * This function is only partially safe with utf-8 multibyte characters. These characters will be treated appropriately if they appear in the original string, but will not be respected if they appear in the padding. Examples:
 * → zzzzZmrzlina
 * → zzzzŽmržlina
 * → žžŽmržlina
 * Tags such as &lt;nowiki> and other tag extensions are not permitted in the padding. If the padstring contains such a tag, it will be truncated.

#replace:
Die Funktion #replace ersetzt in einer gegebenen Zeichenkette einen Suchbegriff durch einen Ersetzungsbegriff. Es werden alle Auftritte des Suchbegriffes ersetzt.

Wenn kein Ersetzungsbegriff angegeben wird, wird der Suchbegriff aus der Zeichenkette entfernt.


 * Diese Funktion unterscheidet Groß- und Kleinschreibung.
 * Die maximale Länge des Suchbegriffes ist in $wgStringFunctionsLimitSearch festgelegt.
 * The maximum allowed length of the replacement term is limited through the $wgStringFunctionsLimitReplace global setting.
 * Even if the replacement term is a space, an empty string is used. This is a side-effect of the MediaWiki parser. To use a space as the replacement term, put it in nowiki tags.
 * Example:  → <tt>My little home page</tt>.
 * Note that this is the only acceptable use of nowiki in the replacement term, as otherwise nowiki could be used to bypass $wgStringFunctionsLimitReplace, injecting an arbitrarily large number of characters into the output. For this reason, all occurrences of &lt;nowiki> or any other tag extension within the replacement term are replaced with spaces.
 * This function is safe with utf-8 multibyte characters. Example:  → <tt>Žmrzlina</tt>.

Currently the syntax doesn't provide a switch to toggle case sensitivity setting. But you may make use of magic words of formatting (e.g. your_string_here ) as a workaround. For example if you want to remove the word "Category:" from the string regardless of its case, you may type:
 * Case insensitive replace

But the disadvantage is the output will become all lower cases. If you want to keep the casing after replacement, you have to use multiple nesting level (i.e. multiple replace calls) to achieve the same thing.

#explode:
Die Funktion #explode teilt eine gegebene Zeichenkette in Abschnitte und gibt einen dieser Abschnitte aus. Die Syntax ist:

Als zweiter Parameter (Trennmarke) ist das Zeichen oder die Zeichenkette anzugeben, an dem die Teilung erfolgen soll. Diese Trennmarke ist dann nicht Teil eines Abschnittes. Wenn zwei solche Trennmarken in der Ausgangszeichenkette direkt hintereinander auftauchen, so ensteht ein leerer Abschnitt zwischen ihnen. Wenn dieser Parameter nicht angegeben wird, wird ein einfaches Leerzeichen als Trennmarke genutzt.

Der dritte Parameter legt fest, welcher der Abschnitte ausgegeben werden soll. Abschnitte werden von 0 an durchnummeriert. Wenn dieser Parameter nicht angegeben wird, wird der erste Abschnitt (Nr. 0) ausgegeben. Wenn ein negativer Wert eingegeben wird, so werden die Abschnitte von hinten gezählt. In diesem Fall entspricht -1 dem letzten Abschnitt. Wenn der Abschnitt mit der eingegebenen Nummer nicht existiert, wird nichts ausgegeben. Beispiele:
 * → <tt>du</tt>
 * → <tt>Fotos</tt>
 * → <tt>geteilt</tt>


 * Diese Funktion unterscheidet Groß- und Kleinschreibung.
 * Die maximale Länge der Trennmarke ist in $wgStringFunctionsLimitSearch festgelegt.
 * Zeichen werden auch korrekt gezählt, wenn sie ihn UTF-8 mehrere Bytes einnehmen. Beispiel:  ergibt <tt>lina</tt>.

#urlencode: und #urldecode:
Diese zwei Funktionen arbeiten zusammen: #urlencode konvertiert eine Zeichenkette in eine URL-kompatiblen Syntax, während #urldecode eine solche Zeichenkette zurückkonvertierten kann. Die Syntax ist einfach:


 * Diese Funktionen arbeiten, indem sie direkt die PHP-Funktionen urlencode und urldecode weitergeben.
 * Für Anker innerhalb einer Seite sollte anstelle von  genutzt werden. Die Ergebnisse von  sind kompatibel mit Links innerhalb von Seiten wie , während  -generierte Werte dies nicht unbedingt sind.

Begrenzungen
Dieses Modul definiert drei globale Einstellungen:
 * <tt>$wgStringFunctionsLimitSearch</tt>
 * <tt>$wgStringFunctionsLimitReplace</tt>
 * <tt>$wgStringFunctionsLimitPad</tt>

These are used to limit some parameters of some functions to ensure the functions operate in O(n) time complexity, and are therefore safe against DoS attacks.

$wgStringFunctionsLimitSearch
This setting is used by #pos, #rpos, #replace, and #explode. All these functions search for a substring in a larger string while they operate, which can run in O(n*m) and therefore make the software more vulnerable to DoS attacks. By setting this value to a specific small number, the time complexity is decreased to O(n).

Diese Einstellung beschränkt die Höchstlänge des erlaubten Suchbegriffs.

Der Standardwert sind 30 Multibyte-Zeichen.

$wgStringFunctionsLimitReplace
This setting is used by #replace. This function replaces all occurrences of one string for another, which can be used to quickly generate very large amounts of data, and therefore makes the software more vulnerable to DoS attacks. This setting limits the maximum allowed length of the replacing string.

Der Standardwert sind 30 Multibyte-Zeichen.

$wgStringFunctionsLimitPad
This setting is used by #pad. This function creates a string of the specified length, which can be used to quickly generate very large amounts of data, and therefore makes the software more vulnerable to DoS attacks. This setting limits the maximum allowed length of the resulting padded string.

Der Standardwert sind 100 Multibyte-Zeichen.

Installation
Diese Erweiterung erfordert MediaWiki 1.7+ und PHP 5.

Für die Installation in MediaWiki sind folgende Schritte vorzunehmen:
 * 1) Kopiere den Quelltext von SVN</tt><BR>...oder, falls du Kommandozeilen-Zugriff hast, kopiere ihn direkt per: <BR>svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/StringFunctions/</tt>
 * 2) Füge der <tt>LocalSettings.php</tt> im Stammverzeichnis deiner MediaWiki-Installation folgendes hinzu:

Versionsgeschichte
StringFunctions 2.0 wurde mit MediaWiki 1.7 und höher erfolgreich getestet.

Versionsgeschichte:
 * Nov 30, 2008 -- v2.0.3 -- Angepasst an Parser-Veränderungen bei MediaWiki 1.14
 * Oct 27, 2008 -- v2.0.2 -- Beschreibung der Erweiterung internationalisiert
 * Aug 27, 2008 -- v2.0.1 -- Regexp handling added for #len
 * May 11, 2008 -- v2.0 -- StringFunctions now maintained in SVN.
 * Dec 10, 2007 -- v2.0 -- Funktionen neu geschrieben, um von mbstring unabhängig zu sein und um mit &lt;nowiki> u.ä. korrekt umgehen zu können.
 * Aug 28, 2007 -- v1.10 -- Negative Stellen zu #explode hinzugefügt.
 * Jan 30, 2007 -- v1.9 -- Obergrenzen für #pos, #pad, #replace, #explode hinzugefügt.
 * Oct 30, 2006 -- v1.8 -- Angepasst an MediaWiki 1.8.
 * Oct 26, 2006 -- v1.6 -- Leerzeichen bei #rpos und #replace repariert.
 * Oct 1, 2006 -- v1.5 -- #rpos, #pad, #replace, #explode hinzugefügt.
 * May 18, 2006 -- v1.2 -- #toURL und #fromURL umbenannt, um sie auf die MediaWiki-Funktion &#123;&#123;urlencode:}} abzustimmen.
 * May 18, 2006 -- v1.1 -- #pos hinzugefügt.
 * May 15, 2006 -- v1.0 -- Erste stabile Version.

Siehe auch

 * DynamicFunctions (en)
 * StringFunctionsEscaped (en) - Functions that also allow you to use escaped characters (such as \n, \t, …)
 * ReplaceSet (en) - an excellent substitute for using nested #replace commands when you need to perform a sequence of replaces on a single text string.
 * ParserFunctions
 * Hilfe zu ParserFunctions
 * RegexParserFunctions (en)
 * VariablesExtension (en)