Extension:ParserFunctions/String functions/de

MediaWiki-Erweiterungen
StringFunctions
Freigabestatus: stabil
Einbindung Parser-Funktion
Autor(en) Tim Starling, Robert Rohde, Ross McClure, Juraj Simlovic
Letzte Version 2.0.1 (27. August 2008)
MediaWiki 1.7+
Lizenz GNU General Public License 2.0 oder neuer
Herunterladen See extension ParserFunctions
  • $wgPFEnableStringFunctions
  • $wgPFStringLengthLimit
Quarterly downloads 310 (Ranked 11th)
Public wikis using 15,766 (Ranked 4th)

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

Hinweis: Wikimedia-Benutzer
Diese Erweiterung ist derzeit in Wikimedia-Wikis nicht aktiviert. (Stand: 18. August 2011.)
Als Aushilfe: String-Vorlagen Siehe bugzilla:6455.
Hinweis: All diese Funktionen außer #pad, #urldecode und #urlencode wurden in die Erweiterung ParserFunctions in der Version r50997 integriert. Diese Version ist für MediaWiki 1.16 erstellt worden, auf früheren Versionen könnte ein Update auf die Stammversion funktionieren.
Hinweis: Um diese Funktionen in der Erweiterung ParserFunctions (Version r50997) zu nutzen, musst du in der LocalSettings.php "$wgPFEnableStringFunctions = true;" setzen.

Funktionen

edit

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

Alle diese Funktionen laufen mit der Zeitkomplexität 𝒪(n), was vor DoS-Attacken schützt.

  Hinweis:

  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 {{lc:Ausdruck}} verwendet werden.

#len:

edit

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

{{#len:Beispiel}} → 8

  Hinweis:

  • Leerzeichen am Ende werden nicht mitgezählt. Beispiel: {{#len:Schokoriegel   }} → 12
  • Zeichen werden ordnungsgemäß gezählt, auch wenn sie in UTF-8 mehrere Bytes einnehmen. Beispiel: {{#len:Žmržlina}} → 8.
  • Tags wie <nowiki> werden samt Inhalt nicht mitgezählt, weil sie vor dem Parser versteckt sind. Beispiel: {{#len:<nowiki>Dies ist ein </nowiki>Test}} → 4.

#pos:

edit

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

{{#pos:Zeichenkette|Suchbegriff|Suchbeginn}}

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:

{{#pos:Das Wort zweimal taucht zweimal auf.|zweimal}} → 9
{{#pos:Das Wort zweimal taucht zweimal auf.|zweimal|10}} → 24
{{#pos:Das Wort zweimal taucht zweimal auf.|doppelt}}

  Hinweis:

  • 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: {{#pos:Žmržlina|lina}} → 4.
  • Wiki-Tags wie <nowiki> werden mitsamt ihrem Inhalt als eine einzige Stelle gezählt: {{#pos:<nowiki>Dies ist ein </nowiki>Test|Test}} → 1.

#rpos:

edit

Die Funktion #rpos durchsucht eine Zeichenkette vom Ende an nach einem Suchbegriff.

 {{#rpos:Zeichenkette|Suchbegriff}}

Es wird die Stelle ausgegeben, an der der Suchbegriffs das letzte Mal innerhalb der Zeichenkette auftaucht. Dabei bedeutet 0 die letzte Stelle der Zeichenkette, und pro Schritt Richtung Anfang erhöht sich die ausgegebene Zahl um 1. Wenn der Suchbegriff nicht gefunden wird, wird -1 ausgegeben.

  Hinweis:

  • 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: {{#rpos:Žmržlina|lina}} → 4.
  • Wiki-Tags wie <nowiki> werden mitsamt ihrem Inhalt als eine einzige Stelle gezählt: {{#rpos:<nowiki>Dies ist ein </nowiki>Test|Test}} → 1.

#sub:

edit

Die Function #sub gibt ein Teilstück einer Zeichenkette aus. Die Syntax ist:

{{#sub:Zeichenkette|Start des Teilstücks|Länge des Teilstücks}}

Der Start-Parameter gibt die erste Stelle des gewünschten Teilstücks innerhalb der Zeichenkette an. Dabei bezeichnet 0 die erste Stelle der Zeichenkette. Beispiel:

{{#sub:Erdbeereis|3}}beereis
{{#sub:Erdbeereis|0}}Erdbeereis.

Wenn der Start-Parameter negativ ist, wird vom Ende der Zeichenkette aus gezählt. Die letzte Stelle entspricht dabei -1. Beispiel:

{{#sub:Erdbeereis|-3}}eis.

Der Parameter Länge legt die Maximallänge des auszugebenden Teilstücks fest. Beispiel:

{{#sub:Erdbeereis|3|4}}beer.

Wenn der Parameter Länge negativ ist, werden entsprechend viele Stellen vom Ende des Teilstücks abgeschnitten. Beispiel:

{{#sub:Erdbeereis|3|-4}}bee.

  Hinweis:

  • Die Längenangabe 0 wird ignoriert.
    • Beispiel: {{#sub:Eisbecher|3|0}}becher
  • Wenn der Parameter Länge negativ und der Start-Parameter zu groß ist, wird nichts ausgegeben.
    • Beispiel: {{#sub:Eisbecher|3|-6}}
  • Zeichen werden ordnungsgemäß gezählt, auch wenn sie in UTF-8 mehrere Bytes einnehmen. Beispiel: {{#sub:Žmržlina|3}}žlina.
  • Wiki-Tags wie <nowiki> werden mitsamt ihrem Inhalt als eine einzige Stelle gezählt: {{#sub:<nowiki>Dies ist ein </nowiki>Test|1}}Test.
  • Wenn die ursprüngliche Zeichenkette einen Doppelpunkt enthält ("etwa:so") und nun das gesamte Teilstück vor dem Doppelpunkt entfernt wird, so (miss)versteht MediaWiki dies gegebenenfalls als Einrückung.

#pad:

edit

Die Funktion #pad verlängert eine gegebene Zeichenkette auf eine bestimmte Länge. Die Syntax lautet:

{{#pad:Zeichenkette|Länge|Füllmaterial|Richtung}}

Der Parameter Länge gibt die gewünschte Endlänge der Zeichenkette an.

Der Parameter Füllmaterial, falls angegeben, wird benutzt, um die fehlenden Stellen auszufüllen. Er kann aus einem einzelnen oder aus mehreren Zeichen bestehen, und wird so lange wiederholt, bis die Lücken aufgefüllt sind. Beispiel:

{{#pad:Eis|10|xX}}xXxXxXxEis.

Wenn kein Füllmaterial angegeben wird, werden Leerzeichen zum Auffüllen verwendet.

Der Richtungs-Parameter kann einen der folgenden Werte annehmen:

  • left - es wird auf der linken Seite der Zeichenkette aufgefüllt. Beispiel: {{#pad:Eis|5|x|left}}xxEis.
  • right - es wird auf der rechten Seite der Zeichenkette aufgefüllt. Beispiel: {{#pad:Eis|5|x|right}}Eisxx.
  • center - die eingegebene Zeichenkette wird in der ausgegebenen zentriert. Beispiel: {{#pad:Eis|5|x|center}}xEisx.

Standardwert ist left.

Die Funktion füllt nun die gegebene Zeichenkette mit dem Füllmaterial bis auf die angegebene Länge auf. Wenn die Zeichenkette bereits länger als die gewünschte Ziellänge ist, wird sie nicht verändert.

  Hinweis:

  • Der Maximalwert für den Parameter Länge ist in $wgStringFunctionsLimitPad festgelegt.
  • Diese Funktion kann nur teilweise mit Zeichen umgehen, die in UTF-8 mehrere Bytes einnehmen. In der ursprünglichen Zeichenkette werden sie wie normale Zeichen behandelt, im Füllmaterial allerdings nicht:
    {{#pad:Zmrzlina|12|z}} → zzzzZmrzlina
    {{#pad:Žmržlina|12|z}} → zzzzŽmržlina
    {{#pad:Žmržlina|12|ž}} → žžŽmržlina
  • Wiki-Tags wie <nowiki> werden nicht unterstützt. Wenn solche Tags in der Zeichenkette enthalten sind, werden sie entfernt.

#replace:

edit

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

{{#replace:Zeichenkette|suchen nach|ersetzen durch}}

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

  Hinweis:

  • Diese Funktion unterscheidet Groß- und Kleinschreibung. Zur Umgehung kann nur {{lc: ...}} benutzt werden, wodurch aber auch das Resultat durchgängig kleingeschrieben ist.
  • Die maximale Länge des Suchbegriffes ist in $wgStringFunctionsLimitSearch festgelegt.
  • Die maximal erlaubte Länge des Parameters ersetzen durch wird durch die globale Variable $wgStringFunctionsLimitReplace festgelegt.
  • Auch wenn bei ersetzen durch ein Leerzeichen angegeben wird, wird der Suchbegriff lediglich entfernt. Dies ist ein Nebeneffekt des MediaWiki-Parsers. Um ein Leerzeichen als Ersetzungsparameter zu benutzen, muss es in nowiki-Tags gesetzt werden.
    • Beispiel: {{#replace:Meine_kleine_feine_Seite|_|<nowiki> </nowiki>}}Meine kleine feine Seite.
    • Bitte beachten: Dies ist die einzig akzeptable Verwendung von nowiki im Parameter ersetzen durch, da sonst nowiki benutzt werden könnte, um $wgStringFunctionsLimitReplace zu umgehen und eine große Anzahl Leerzeichen einzuschleusen. Daher wird der Inhalt von nowiki-Tags immer durch ein einzelnes Leerzeichen ersetzt.
  • Auch diese Funktion kann problemlos mit UTF-8-Multibyte-Zeichen umgehen. Beispiel: {{#replace:Žmržlina|ž|z}}Žmrzlina.

#explode:

edit

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

{{#explode:Zeichenkette|Trennmarke|auszugebender Abschnitt}}

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:

  • {{#explode:Und wenn du das tolerierst| |2}}du
  • {{#explode:Dateien/Bilder/Fotos|/|-1}}Fotos
  • {{#explode:An%Prozentzeichen%geteilt|%|2}}geteilt
  • {{#explode:Zu, wenige, Abschnitte|, |5}}

  Hinweis:

  • 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: {{#explode:Žmržlina|ž|1}} ergibt lina.

#urlencode: und #urldecode:

edit

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:

{{#urlencode:Wert}}
{{#urldecode:Wert}}

  Hinweis:

  • Diese Funktionen arbeiten, indem sie direkt die PHP-Funktionen urlencode() und urldecode() weitergeben.
  • Für Anker innerhalb einer Seite sollte {{anchorencode}} anstelle von {{#urlencode}} genutzt werden. Die Ergebnisse von {{anchorencode}} sind kompatibel mit Links innerhalb von Seiten wie [[#Beispiel]], während {{#urlencode}}-generierte Werte dies nicht unbedingt sind.

Begrenzungen

edit

Dieses Modul definiert drei globale Einstellungen:

Sie dienen dazu, die Funktionen mit der Zeitkomplexität 𝒪(n) laufen zu lassen, was vor DDoS-Attacken schützt.

$wgStringFunctionsLimitSearch

edit

Diese Variable wird bei #pos, #rpos, #replace und #explode benutzt. All diese Funktionen suchen nach einem Suchbegriff in einem Text, was mit O(n*m) laufen könnte und die Software damit anfälliger für DDoS-Attacken machen würde. Durch Festlegung dieser Variable auf einen bestimmten, kleinen Wert wird die Senkung auf O(n) erreicht.

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

Der Standardwert sind 30 Multibyte-Zeichen.

$wgStringFunctionsLimitReplace

edit

Diese Variable wird bei #replace benutzt. Diese Funktion ersetzt alle Vorkommen eines Suchbegriffs durch einen anderen, was genutzt werden könnte, um in kurzer Zeit sehr große Datenmengen zu generieren, und die Software damit anfällig für DDoS-Attacken machen würde.

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

Der Standardwert sind 30 Multibyte-Zeichen.

$wgStringFunctionsLimitPad

edit

Diese Variable wird bei #pad benutzt. Diese Funktion erzeugt eine Zeichenkette mit einer gewünschten Länge, was genutzt werden könnte, um in kurzer Zeit sehr große Datenmengen anzufordern, und die Software damit anfällig für DDoS-Attacken machen würde.

Diese Einstellung beschränkt die Höchstlänge der fertigen Zeichenkette.

Der Standardwert sind 100 Multibyte-Zeichen.

Installation

edit

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
    ...oder, falls du Kommandozeilen-Zugriff hast, kopiere ihn direkt per:
    svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/StringFunctions/
  2. Füge der LocalSettings.php im Stammverzeichnis deiner MediaWiki-Installation folgendes hinzu:
require_once ("$IP/extensions/StringFunctions/StringFunctions.php");

Versionsgeschichte

edit

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 -- Verwendung von regexp bei #len hinzugefügt.
  • May 11, 2008 -- v2.0 -- StringFunctions werden nun bei SVN gepflegt.
  • Dec 10, 2007 -- v2.0 -- Funktionen neu geschrieben, um von mbstring unabhängig zu sein und um mit <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 {{urlencode:}} abzustimmen.
  • May 18, 2006 -- v1.1 -- #pos hinzugefügt.
  • May 15, 2006 -- v1.0 -- Erste stabile Version.

Siehe auch

edit