PHP/Zeichenkettenverarbeitung: Unterschied zwischen den Versionen
Michi (Diskussion | Beiträge) (Die Seite wurde neu angelegt: == Übersicht Zeichenkettenfunktionen == {| class=wikitable width=100% ! colspan=2 | Funktionen für besondere Zeichen und Zeichenfunktionen |- | width=10% | <tt>addsl...) |
Michi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 86: | Zeile 86: | ||
| <tt>chop</tt> || Entfernt Leerzeichen am Ende der Zeichenkette. | | <tt>chop</tt> || Entfernt Leerzeichen am Ende der Zeichenkette. | ||
|- | |- | ||
| <tt>chunk_split</tt> || Teilt eine Zeichenkette nach | | <tt>chunk_split</tt> || Teilt eine Zeichenkette nach Byte. | ||
|- | |- | ||
| <tt>convert_cyr_string</tt> || Wandelt kyrillische Zeichensätze um. | | <tt>convert_cyr_string</tt> || Wandelt kyrillische Zeichensätze um. |
Aktuelle Version vom 26. Februar 2010, 22:32 Uhr
Übersicht Zeichenkettenfunktionen
Funktionen für besondere Zeichen und Zeichenfunktionen | |
---|---|
addslashes | Setzt einen Backslash ("\", das Escape-Zeichen) vor Sonderzeichen. |
addcslashes | Fügt Escape-Zeichen beliebigen Zeichen hinzu. |
stripcslashes | Entfernt Escape-Zeichen von beliebigen Zeichen. |
chr | Gibt ein zeichen für den angegebenen ASCII-Wert zurück. |
ord | Gibt den ASCII-Wert eines Zeichens zurück. |
Verschlüsselungsfunktionen | |
crc32 | Berechnet die Prüfsumme (ein 32 Bit-Polynom) einer Zeichenkette. |
crypt | Verschlüsselt eine Zeichenkette nach DES. Für umfangreichere Aufgaben gibt es eine ganze Kryptographiebibliothek, die weit über die Möglichkeiten von "crypt" hinausgeht. |
md5 | Berechnet die MD5-Zeichenfolge einer Zeichenkette. Dies ist ein Hashwert |
md5_file | Berechnet die MD5-Zeichenfolge einer Datei. Dies ist ein Hashwert |
sha1 | Berechnet den Hashwert einer Zeichenkette. |
sha1_file | Berechnet den Hashwert einer Datei. |
HTML- und Webfunktionen | |
flush | Leert den Ausgabepuffer. |
get_meta_tags | Extrahiert die "<META>"-Tags aus einer Datei. |
htmlspecialchars | Wandelt in besondere HTML-Symbole um. |
htmlentities | Wandelt in besondere HTML-Symbole um. |
nl2br | Wandelt native Zeilenumbrüche in "<br />"-Tags. |
quotes_printable_decode | Dekodiert Zeichenfolgen, die mit "Quoted printable" kodiert wurden. |
quotemeta | Setzt einen Backslash vor jedes Sonderzeichen. |
rawurldecode | Macht eine Zeichenfolge URL-fähig. |
rawurlencode | Wandelt per URL übergebene Daten wieder in eine Zeichenfolge um. |
parse_str | Analysiert die Suchzeichenfolge und legt die Parameter in Variablen oder optional in einem Array ab. |
get_html_translation_table | Gibt ein Array zurück, das die Übersetzungstabelle für HTML-Zeichen enthält. |
strip_tags | Entfernt HTML- und PHP-Tags. |
Aus- und Eingabefunktionen | |
Gibt Argumente aus (vergleiche auch "echo"). | |
printf | Gibt Argumente formatiert aus. |
sprintf | Gibt eine formatierte Zeichenkette zurück. |
vprintf | Arbeitet wie "printf", akzeptiert die Argumente aber als ein Array. |
vsprintf | Arbeitet wie "sprintf", akzeptiert die Argumente aber als ein Array. |
sscanf | Erkennt formatierte Zeichen in Eingabezeichenfolgen. |
Lokalisierungsfunktionen | |
localeconv | Informationen über die Formatierung. |
nl_langinfo | Bietet nur Informationen über bestimmte Einstellungen von PHP, die sich auf andere Funktionen auswirken. |
setlocale | Bestimmt eine sprachliche Lokalisierung. Verschiedene andere Funktionen reagieren darauf. |
Arrayspezifische Funktionen | |
implode join |
Fasst ein Array zu einer Zeichenkette zusammen. "join" ist ein Alias für "implode". |
explode | Teilt eine Zeichenkette an einem Trennzeichen und gibt die Fragmente als Array zurück. |
Reine Zeichenkettenfunktionen | |
chop | Entfernt Leerzeichen am Ende der Zeichenkette. |
chunk_split | Teilt eine Zeichenkette nach Byte. |
convert_cyr_string | Wandelt kyrillische Zeichensätze um. |
ltrim | Entfernt Leerzeichen auf der linken Seite. |
strcasecmp | Vergleicht zwei Zeichenketten ohne Berücksichtigung von Gross- und Kleinschreibung. |
strchr strstr |
Findet das Auftreten eines Zeichens in einer Zeichenkette von der linken Seite her. "strstr" ist ein Alias für "strchr". |
strrchr | Findet das Auftreten eines Zeichens in einer Zeichenkette von der rechten Seite her. |
strcmp | Vergleicht zwei Zeichenketten. |
strcoll | Zeichenkettenvergleich auf der Grundlage sprachspezifischer Informationen. |
strcspn | Gibt einen Teil einer Zeichenkette zurück, die nicht Zeichen einer zweiten Zeichenkette enthält. |
strlen | Gibt die Länge einer Zeichenkette zurück. |
strrpos | Sucht ein Zeichen von der rechten Seite der Zeichenkette her. |
strpos | Sucht ein Zeichen von der linken Seite der Zeichenkette her. |
stripos | Sucht ein Zeichen von der linken Seite der Zeichenkette her, wobei die Erkennung von Gross- und Kleinschreibung unterdrückt wird. |
strrev | Dreht eine Zeichenkette um. |
strspn | Erkennt Zeichen in einer Zeichenkette und gibt diesen Teil zurück. |
strtok | Trennt eine Zeichenkette in Teile. |
strtolower | Wandelt in Kleinbuchstaben um. |
strtoupper | Wandelt in Grossbuchstaben um. |
str_replace | Ersetzt Zeichen einer Zeichenkette. |
strtr | Ersetzt mehrere Zeichen einer Zeichenkette durch mehrere andere. |
substr | Gibt einen Teil einer Zeichenkette zurück. |
substr_count | Ermittelt die Anzahl von Vorkommen in einer Zeichenkette. |
substr_replace | Ersetzt Teile einer Zeichenkette. |
str_repeat | Wiederholt ein bestimmtes Zeichen. |
trim | Entfernt Leerzeichen auf der linken und der rechten Seite. |
ucfirst | Macht das erste Zeichen zum Grossbuchstaben. |
ucwords | Das erste Zeichen jedes Worts wird zum Grossbuchstaben. |
wordwrap | Bricht Texte an Wortgrenzen um. |
Sprachfunktionen | |
levenshtein | Gibt die Entfernung zweier Zeichenketten nach der Levenshtein-Funktionsweise zurück. |
metaphone | Gibt den Lautwert einer Zeichenkette zurück. |
soundex | Bildet den Lautwert einer Zeichenkette ab. |
similar_text | Berechnet die Ähnlichkeit zwischen zwei Zeichenketten. |
Zeichenkettenverarbeitung
Bei der Übernahme von Daten spielen Leerzeichen eine wichtige Rolle. Viele Datenbanken haben feste Spaltenbreiten eingestellt und füllen Felder entsprechend mit Leerzeichen auf. Der Webbrowser wird mehrere Leerzeichen hintereinander nicht darstellen, ausserdem stören führende Leerzeichen beim Sortieren. Es gibt also gute Gründe, überflüssige Leerzeichen zu entfernen. Dazu zählen alle sogenannten "whitespaces", also Zeichen die beim Ausdruck "weiss" sind:
' ', 0x20 | Leerschlag |
\r | Zeilenumbruch (Wagenrklauf, engl. carriage return) |
\n | Zeilenumbruch (Neue Zeile, engl. newline) |
\t | Horizontaler Tabulator |
\0113 | Vertikaler Tabulator |
Die Funktion "chop" entfernt Leerzeichen von der rechten Seite, "ltrim" entfernt sie von der linken Seite, "trim" von beiden Seiten einer Zeichenkette. Mehrere Leerzeichen hintereinander werden vom Webbrowser zu einem Leerzeichen verkürzt. Im Quelltext sind die mehrfachen Leerzeichen allerdings durchaus vorhanden. Die Funktionen geben den veränderten Wert zurück - die übergebene Variable selbst bleibt unverändert.
<?php
$leerzeichen = " Am Anfang und am Ende ";
echo ".", chop($leerzeichen), ".<br />";
echo ".", ltrim($leerzeichen), ".<br />";
echo ".", trim($leerzeichen), ".<br />";
?>
|
. Am Anfang und am Ende. |
Die Länge von Zeichenketten kann mit "strlen" bestimmt werden. Mit "strrev" lässt sich die Reihenfolge der Zeichen umkehren. "strtolower", "strtoupper", "ucfirst" und "ucwords" führen Umwandlungen zwischen Gross- und Kleinschreibung durch.
<?php
$zeichenkette = "Die Skriptsprache PHP ist vielseitig";
echo "strlen: ", strlen($zeichenkette), " Zeichen.<br />";
echo "strrev: ", strrev($zeichenkette), ".<br />";
echo "strtolower: ", strtolower($zeichenkette), ".<br />";
echo "strtoupper: ", strtoupper($zeichenkette), ".<br />";
echo "ucfirst: ", ucfirst($zeichenkette), ".<br />";
echo "ucwords: ", ucwords($zeichenkette), ".<br />";
?>
|
36 Zeichen. |
Zeichenketten müssen oft zerlegt oder zusammengesetzt werden. "explode" zerlegt eine Zeichenkette anhand des Auftretens eines Trennzeichens und weist die einzelnen Elemente dann einem Array zu. Im folgenden Beispiel wird eine kommagetrennte Zeichenkette in ein Array zerlegt, dieses Array wird anschliessend mit "sort" sortiert und wieder an die Zeichenkette zurückgegeben, indem es mit "implode" zusammengefasst wird. Der erste Parameter von "implode" bestimmt das Trennzeichen, der zweite die umzuwandelnde Zeichenkette. Das Original wird dabei nicht verändert.
<?php
$zeichenkette = "Klaus,Johann,Friedrich,Edeltraut,Lukas";
echo $zeichenkette, "<br />";
$sorter = explode(",", $zeichenkette);
sort($sorter);
$zeichenkette = implode(",", $sorter);
echo $zeichenkette, "<br />";
?>
|
Klaus,Johann,Friedrich,Edeltraut,Lukas |
Oft müssen Zeichenketten durchsucht werden. Mit "strpos" und "strrpos" wird die Position eines Zeichens innerhalb einer Zeichenkette bestimmt. "strrchr", "substr", "strstr" und "preg_match" bieten sich an, um die Zeichenkette gleich an der Fundstelle zu trennen.
"strpos" findet das erste Auftreten der Zeichenkette "Nadel" in der Zeichenkette "Heuhaufen". Der Vergleich beginnt an der mit "offset" bestimmten Position. Wird keine Übereinstimmung gefunden, so gibt die Funktion "FALSE" zurück.
int strpos(string Heuhaufen, string Nadel[, int offset])
|
Wird "offset" verwendet, so wird erst ab dieser Position gesucht. Im Gegensatz zu "strrpos" verarbeitet die Funktion "strpos" auch Zeichenketten. Im Beispiel wird erst ab der 9. Position gesucht (auf Position 8 befindet sich das erste "e", auf Position 11 das nächste).
<?php
$zeichen = "e";
$haystack = "Das ist eine lange Zeichenkette";
$position = strpos($haystack, $char, 9);
echo "Das erste <b>$zeichen</b> ist auf Position: $position";
?>
|
Das erste e ist auf Position: 11 |
"strstr" sucht das Auftreten eines Zeichens vom Beginn an und gibt die Zeichenkette ab dieser Position zurück. "strrchr" sucht das letzte Auftreten des Zeichens und gibt die Zeichenkette von dort beginnend bis zum Ende zurück. "substr" ermöglicht die Auswahl eines Teils einer Zeichenkette durch Angabe der Position und der Länge des Teils.
<?php
$zeichenkette = "Klaus,Johann,Friedrich,Edeltraut,Lukas";
echo "<p>$zeichenkette</p>";
echo "Erste Position : ", strpos($zeichenkette,"e"), "<br />";
echo "Letzte Position: ", strrpos($zeichenkette,"e"), "<br />";
echo "Teil : ", substr($zeichenkette, 6, 4), "<br />";
echo "Von rechts : ", strrchr($zeichenkette, "r"), "<br />";
echo "Von links : ", strstr($zeichenkette, "r"), "<br />";
?>
|
Klaus,Johann,Friedrich,Edeltraut,Lukas |
"strtok" zerlegt eine Zeichenkette anhand des Trennzeichens "delimiter" in mehrere Teile (engl. token).
mixed strtok([string argument,] string delimiter)
|
Die zu zerlegende Zeichenkette muss nur beim ersten Aufruf angegeben werden. Alle folgenden Aufrufe benötigen nur das Trennzeichen. Im Gegensatz zu "explode" wird kein Array erzeugt, sondern immer nur das nächste Token zurückgegeben. Es ist auch erlaubt, mehrere Trennzeichen anzugeben, die dann alternativ in der Zeichenkette enthalten sein können. Die Funktion gibt, wenn keine Teile mehr zu extrahieren sind, "FALSE" zurück. das folgende Beispiel zerlegt einen Text nach Leerzeichen.
<?php
$text = "Ein einfacher Text";
$chars = " ";
$part = strtok($text, $chars);
do
{
echo "$part<br />\n";
}
while($part = strtok($chars));
?>
|
Ein |
Durch Erweiterung der Variable "$chars" können auch weitere Zeichen als Trennzeichen erkannt werden.
<?php
$text = "Ein einfacher Text.";
$chars = " .,?";
$part = strtok($text, $chars);
do
{
echo "$part<br />\n";
}
while($part = strtok($chars));
?>
|
Ein |
Die Funktion "strspn" ermittelt die Anzahl der Zeichen am Anfang von "$zeichenkette1", die aus dem in "$zeichenkette2" übergebenen Zeichenvorrat stammen.
int strspn ( string $zeichenkette1, string $zeichenkette2 [, int $start [, int $laenge ]] )
|
Die Funktion "strcspn" ermittelt die Länge von "$zeichenkette1" bis zum ersten Erscheinen eines der in "$zeichenkette2" übergebenenen Zeichen.
int strcspn ( string $zeichenkette1, string $zeichenkette2 [, int $start [, int $laenge ]] )
|
<?php
$zeichenkette = "Lukas,Findo,Schifer,Balts";
echo "<p>$zeichenkette</p>\n";
echo "Enthalten: ", strspn($zeichenkette, "uLks"), "<br />\n";
echo "Nicht enthalten: ", strcspn($zeichenkette, "i");
?>
|
Lukas,Findo,Schifer,Balts 3 |
Die Funktion "str_replace" ersetzt alle Vorkommen der Suchzeichenkette durch eine andere Zeichenkette. Im Beispiel wird die durch Kommata getrennte Liste zeilenweise ausgegeben, indem als Trennzeichen das HTML-Tag "<br \>" eingesetzt wird.
<?php
$zeichenkette = "Balts,Endo,Schifer";
echo "<p>$zeichenkette</p>\n";
echo str_replace(",", "<br />\n", $zeichenkette);
?>
|
Balts,Endo,Schifer Balts |
Umwandlungsfunktionen
"chr" und "ord" sind typische Umwandlungsfunktionen. Damit werden einzelne Werte in ASCII-Zeichen umgewandelt und umgekehrt. Dabei wird der erweiterte 8-Bit-ASCII-Zeichensatz berücksichtigt, sodass auch Umlaute richtig behandelt werden.
"chr" wird oft verwendet, um bestimmte Zeichen auszugeben, die für den PHP-Parser von Bedeutung sind - zum Beispiel Anführungszeichen.
"ord" gibt den ASCII-Wert eines Zeichens zurück. Wird eine Zeichenkette mit mehr als einem Zeichen übermittelt, so wird der Wert nur für das erste Zeichen ermittelt.
<?php
echo "Zeichen 105 = ", chr(105);
echo "<br />";
$zeichen = "Ö";
echo "ASCII-Wert von $zeichen = ", ord($zeichen);
?>
|
i |
Folgendes Skript zeigt, welchen Code einige Sonderzeichen in PHP haben.
<?php
$array = array("\n", "\t", "\r", "\\");
foreach ($array as $str)
{
echo "ord(" . ord($str) . ")<br />\n";
}
?>
|
ord(10) |
Sonderzeichenbehandlung
Viele Zeichen haben innerhalb einer Zeichenkette eine Sonderbedeutung, beispielsweise kann der PHP-Interpreter anhand des "$"-Zeichens Variablen mitten in einer Zeichenkette erkennen und durch den Inhalt der Variablen ersetzen.
Die Funktion "quotemeta" setzt einen Backslash ("\") vor jedes der folgenden Sonderzeichen:
. \ + * ? [ ] ^ ( ) $
Die Funktion "addslashes" setzt einen Backslash ("\") vor jedes der folgenden Sonderzeichen, die oft von Datenbanken interpretiert werden. Dabei steht "NUL" für den absoluten Wert 0 - nicht zu verwechseln mit der Konstanten "NULL", die für "undefiniert" steht. In einigen Programmiersprachen dient ein NUL-Byte als Endekennzeichen für Zeichenketten. Die Zeichenkette wird verändert zurückgegeben.
' " \ NUL
In manchen Situationen ist die Anwendung trickreich. So erkennt die Funktion typische Zeichen und versieht sie nicht mit einem Backslash, sondern lässt die Ausführung zu. Das folgende Beispiel zeigt diesen Effekt. Die Zeichenkette "c:\temp" enthält "\t", das Ersatzzeichen für den Tabulator. Bereits bei der Zuweisung der Zeichenkette mit doppelten Anführungszeichen wird der Zeichenketteninterpreter eingeschaltet.
<?php
$str = "c:\temp";
echo "A: " . $str . "<br />\n";
echo "B: " . addslashes($str) . "<br />\n";
$str = addslashes("c:\temp");
echo "E: " . $str . "<br />\n";
echo "F: " . addslashes($str) . "<br />\n";
$str = 'c:\temp';
echo "C: " . $str . "<br />\n";
echo "D: " . addslashes($str) . "<br />\n";
$str = addslashes('c:\temp');
echo "G: " . $str . "<br />\n";
echo "H: " . addslashes($str) . "<br />\n";
?>
|
c: emp |
Die Funktion "stripslashes" macht die durch "addslashes" vorgenommenen Umwandlungen wieder rückgängig.
Die Funktion "addcslashes" versieht in einer Zeichenkette ebenfalls bestimmte vorgegebene Elemente mit einem Backslash. Die Zeichenkette wird verändert zurückgegeben. Dabei sind in "$zeichenliste" alle Zeichen enthalten, die mit einem Backslash versehen werden sollen. Nicht über die Tastatur eingebbare Zeichen werden im Oktalformat angegeben. Es ist möglich. mit zwei Punkten einen Bereich anzugeben (z. B. "a..z") - wenn allerdings das erste Zeichen einen höheren Code als das zweite hat, so werden nur die beiden Zeichen, aber nicht diejenigen dazwischen erkannt.
string addcslashes(string $zeichenkette, string $zeichenliste)
|
Folgende Anweisung wandelt die Zeichen "\", "@" und "!" um.
<?php
$convert = "ugu@dodo.net!";
$cslash = addcslashes($convert, "\@!");
echo $cslash . "<br />\n";
$convert = "9. E-Mail: ugu@dodo.net !";
$cslash = addcslashes($convert, "a..zA..Z0..9@!");
echo $cslash;
?>
|
ugu\@dodo.net\! |
Zeichenketten vergleichen
Beim Vergleichen von Zeichenketten sollte an die losen Datentypen von PHP und die gegebenenfalls ablaufenden Umwandlungsprozesse gedacht werden. Folgendes Beispiel führt zu einer Meldung, weil PHP zuerst eine Umwandlung durchführt, um den Vergleich mit zwei gleichartigen Datentypen durchführen zu können. Aus der Zeichenkette "26" wird so die Zahl 26, wenn PHP den Inhalt als Zahl erkennen kann.
<?php
$zahl1 = 26;
$zahl2 = "26";
if ($zahl1 == $zahl2)
{
echo "Die Zahlen sind gleich.<br />\n";
}
?>
|
Die Zahlen sind gleich. |
Wenn solche Vergleiche benötigt werden und der der Variablen bereits zugewiesene Datentyp unterschieden werden soll, so ist der erweiterte Vergleichsoperator "===" angebracht.
<?php
$zahl1 = 26;
$zahl2 = "26";
if ($zahl1 === $zahl2)
{
echo "Die Zahlen sind gleich.<br />\n";
}
?>
|
Für den umgekehrten Weg dient die Funktion "strcmp", die ebenfalls Zeichenketten vergleicht und Zahlen immer in eine Zeichenkette umwandelt. Sie vergleicht zwei Zeichenketten und gibt
- den Wert "-1" zurück, wenn die erste Zeichenkette kleiner als die zweite ist. Als "kleiner" wird die Zeichenkette angesehen, wenn der ASCII-Wert des ersten nicht übereinstimmenden Zeichens auf derselben Position in der Zeichenkette kleiner ist.
- den Wert "0" zurück, wenn beide Zeichenketten gleich sind.
- den Wert "1" zurück, wenn die erste Zeichenkette grösser ist als die zweite. Als "grösser" wird die Zeichenkette angesehen, wenn der ASCII-Wert des ersten nicht übereinstimmenden Zeichens auf derselben Position in der Zeichenkette grösser ist.
Da Kleinbuchstaben im ASCII-Alphabet nach den Grossbuchstaben kommen, ist "C" kleiner als "a". Dieser direkte Vergleich ist allerdings wenig praxisnah.
<?php
$str1 = "Endo";
$str2 = "Balts";
echo strcmp($str1, $str2);
?>
|
1 |
Die Funktion "strnatcmp" vergleicht Zeichenketten so, wie es die natürliche Leseweise ergeben würde. "strnatcasecmp" lässt dabei zusätzlich die Gross- und Kleinschreibung unberücksichtigt.
int strnatcmp(string $zeichenkette1, string $zeichenkette2)
|
int strnatcasecmp(string $zeichenkette1, string $zeichenkette2)
|
Normalerweise suchen Rechner zeichenweise. Bei einem direkten Vergleich ist deshalb die Zeichenkette "2" grösser als die Zeichenkette "10" - die 2 ist grösser als die 1, damit ist der Vergleich abgeschlossen. "strnatcmp" versucht dagegen, die menschliche Leseweise zu imitieren und würde in diesem Fall erkennen, dass 10 grösser ist als 2.
<?php
$str1 = "2";
$str2 = "10";
echo "strcmp: ";
strcmp($str1, $str2) == 1 ? print "$str1 grösser"
: print "$str2 grösser";
echo "<br />\n";
echo "strnatcmp: ";
strnatcmp($str1, $str2) == 1 ? print "$str1 grösser"
: print "$str2 grösser";
echo "<br />\n";
?>
|
strcmp: 2 grösser |
HTML-spezifische Funktionen
HTML ist eine Seitenbeschreibungssprache, die ASCII-Zeichen verwendet. Dokumente werden mit Elementen strukturiert, die als "Tags" bezeichnet werden. Solche Tags beginnen mit einem "<"-Zeichen und enden mit einem ">"-Zeichen. Einige Symbole (z. B. "&") haben ebenfalls eine besondere Bedeutung. Mit besonderen Funktionen wird in PHP die Umwandlung unterstützt.
Die Funktion "htmlspecialchars" wandelt die folgenden Zeichen so um, dass die Darstellung in HTML richtig erfolgt. Die Funktion berücksichtigt keineswegs alle HTML-Zeichen, sondern wirklich nur die hier aufgeführten. Die Anwendung betrifft vor allem Formulare, wo diese Zeichen gesondert verarbeitet werden können.
Zeichen | Umwandlung |
---|---|
& | & |
" | " |
< | < |
> | > |
<?php
$html = "<p>Wir haben mit <br />PHP<br /> was vor.</p>";
echo $html;
echo "<p>";
echo htmlspecialchars($html);
echo "</p>\n";
?>
|
Wir haben mit Wir haben mit <br>PHP<br /> was vor. |
Die Funktion "htmlentities" wandelt dagegen alle HTML-Symbole um und berücksichtigt dabei auch die Umlaute, das "Ä" wird so zum "Ä". Zur Erkennung von Sonderzeichen und Zeichenketten wird der Zeichensatz ISO-8859-1 verwendet.
Die Funktion "get_html_translation_table" gibt die Umwandlungstabelle für die HTML-Sonderzeichen aus. Im folgenden Beispiel enthält die Variable "$encoded" den Inhalt mit HTML-Sonderzeichen, die nur im HTML-Quelltext sichtbar sind, vom Webbrowser aber in jedem Fall richtig dargestellt werden.
<?php
$trans = get_html_translation_table(HTML_ENTITIES);
$str = "Hallo & <Frau> & Krämer";
$encoded = strtr($str, $trans);
echo $encoded;
?>
|
Hallo & <Frau> & Krämer |
Zeichenketten enthalten oft normale Zeichenumbrüche, die Darstellung ist teilweise vom Betriebssystem abhängig. In HTML werden Zeilenumbrüche mit dem Tag "<br>" in XHTML mit "<br />", erzeugt. Die Funktion "nl2br" (newline to break) fügt an alle Zeilenumbrüche die Zeichenfolge "<br />" an. Damit die Ausgabe auch bei der Anzeige des Quelltexts einer HTML-Seite nicht unleserlich wird, bleiben die ursprünglichen Umbruchcodes "chr(10)" und/oder "chr(13)" erhalten. Auf welche Weise "nl2br" reagiert ist vom Betriebssystem abhängig. Verwaltet man seine Texte unter Linux und lässt "nl2br" unter Windows ablaufen, so wird die Funktion also nicht unbedingt richtig reagieren.
<?php
$vieltext = "Zuviel
Hopfen
in Ägypten
";
echo "<p>" . $vieltext . "</p>\n";
echo "<p>" . nl2br($vieltext) . "</p>\n";
?>
|
Zuviel Hopfen in Ägypten Zuviel |
Codierung von URL-Daten
Werden Zeichenketten an eine URL angehängt werden, so müssen diese den Konventionen für den Aufbau einer URL genügen - Umlaute, Sonderzeichen und Leerzeichen sind dabei nicht erlaubt. Die technische Grundlage für die notwendige Umwandlung kann in RFC 1738 nachgelesen werden. Umgewandelt werden sollen danach alle Zeichen ausser alphanumerischen und dem Punkt ("."), dem Unetrstrich ("_") und dem Minuszeichen ("-").
Die Funktion "rawurlencode" wandelt die nicht zulässigen Zeichen in zulässige um. Dabei handelt es sich um die Zeichenfolge "%HH", wobei "HH" für den hexadezimalen ASCII-Wert des Zeichens steht.
Die Funktion "urlencode" nimmt bei der Umwandlung das Pluszeichen ("+") als Ersatzzeichen, was historisch verwendet wird und aus Kompatibilitätsgründen zum Einsatz gelangt. Es entspricht aber nicht der erwähnten RFC 1738.
<?php
$html = "Dies soll übertragen werden";
$html1 = rawurlencode($html);
$html2 = urlencode($html);
echo $html . "<br />";
echo $html1 . "<br />";
echo $html2 . "<br />";
?>
|
Dies soll übertragen werden |
Die Funktion "parse_str" erkennt den an die URL angehängten Parameter und weist ihn einem Array zu. Diese Funktion ist für alle interaktiv Daten verarbeitenden Skripte von grösster Bedeutung. Alternativ kann als zweiter Parameter ein Array angegeben werden - in diesem Fall enthält es anschliessend die Parameter / Werte-Paare.