Inhalt
A Einführung
B HTML für PHP
C Strukturierte Programmierung mit PHP
D Bearbeitung von Formularen
E Datenbanken mit MySQL
F Programmierung von MySQL–Datenbanken mit PHP
G Text-Dateien
H Arrays
I Mathematische Funktionen
J Zeichenketten-Funktionen
K Neu in PHP 4
L HTML
M Anhang
N Lösungen
Index
Download (ca. 3,4 MB)
<< zurück | Galileo Computing / <openbook> / PHP 4 | vor >>
PHP 4 von Thomas Theis Webserver-Programmierung für Einsteiger
| Kapitel J Zeichenketten-Funktionen
|  | J.1 Länge, Umwandlungsfunktionen
|  | J.2 Zeichenketten und Arrays
|  | J.3 Teil-Zeichenketten
|  | J.4 Suchen in Zeichenketten
|  | J.5 Vergleich von Zeichenketten
|  | J.6 Codierung von Zeichen
# Kapitel J Zeichenketten-Funktionen Funktionen zur Analyse, Umwandlung und Bearbeitung von Zeichenketten, wie sie häufig in Eingaben von Benutzern vorkommen, sind Inhalt des vorliegenden Abschnittes. Strings Aus Formular-Eingabefeldern, Dateien und Datenbanken gelangen häufig Zeichenketten (Strings) in ein weiterverarbeitendes PHP-Programm, die analysiert und bearbeitet werden müssen. Zu diesem Zwecke werden eine Reihe von Zeichenketten-Funktionen zur Verfügung gestellt. Einige nützliche Funktionen sollen hier vorgestellt werden. ## J.1 Länge, Umwandlungsfunktionen Umwandlung Die Länge einer eingegebenen Zeichenkette wird mit strlen() gemessen. Alle eingegebenen Zeichen können in Kleinbuchstaben (strtolower()) oder Großbuchstaben (strtoupper()) umgewandelt werden. Der erste Buchstabe einer Zeichenkette (ucfirst()) oder jedes einzelnen Wortes (ucwords()) kann in einen Großbuchstaben verwandelt werden. Die Zeichenkette kann umgedreht werden (strrev()). Bestimmte Zeichen (strtr()) oder Teil-Zeichenketten (str_replace()) können durch andere Zeichen bzw. andere Teil-Zeichenketten ersetzt werden. In dem nachfolgendem Formular soll eine beliebige Zeichenkette eingegeben werden, die anschließend von einem Programm mittels verschiedener Methoden umgewandelt wird. Zunächst der Programmcode: Listing J.1 Datei uj01.htm
    <html>
    <body>
    Tragen Sie einen Test-Satz ein, und senden Sie
    das Formular ab<br>
    Der Satz sollte einige Worte umfassen,
    damit das Ergebnis erkennbar wird
    <form action = "uj01.php" method = "post">
    <input name="test" size="50"><p>
    <input type="submit" value="Absenden"><p>
    </form>
    </body>
    </html>
Abbildung J.1 Zeichenkette zur Umwandlung
Das Ergebnis der verschiedenen Umwandlungen sieht wie folgt aus:
Abbildung J.2 Umwandlungen einer Zeichenkette
Hier das Programm: Listing J.2 Datei uj01.php
    <html>
    <body>
    <?php
       echo "Umwandlungs-Funktionen:<p>";
       echo "<TABLE BORDER>";
       echo "<TR> <TD>Funktion</TD> <TD>Erläuterung</TD>
             <TD>Ergebnis</TD> </TR>";
       echo "<TR> <TD>&nbsp;</TD> <TD>Original</TD>
             <TD>$test</TD> </TR>";
       $lg = strlen($test);
       echo "<TR> <TD>strlen</TD> <TD>Länge</TD>
             <TD>$lg</TD> </TR>";
       $kl = strtolower($test);
       echo "<TR> <TD>strtolower</TD> <TD>alles klein</TD>
             <TD>$kl</TD> </TR>";
       $gr = strtoupper($test);
       echo "<TR> <TD>strtoupper</TD> <TD>alles groß</TD>
             <TD>$gr</TD> </TR>";
       $uf = ucfirst($test);
       echo "<TR> <TD>ucfirst</TD> <TD>erstes Zeichen groß</TD>
             <TD>$uf</TD> </TR>";
       $uw = ucwords($test);
       echo "<TR> <TD>ucwords</TD> <TD>erstes Zeichen jedes
             Wortes groß</TD> <TD>$uw</TD> </TR>";
       $rv = strrev($test);
       echo "<TR> <TD>strrev</TD> <TD>umdrehen</TD>
             <TD>$rv</TD> </TR>";
       $tr = strtr($test,"ab","AB");
       echo "<TR> <TD>strtr</TD> <TD>alle 'a' und 'b' ersetzt
             durch 'A' und 'B'</TD> <TD>$tr</TD> </TR>";
       $rp = str_replace("hallo","hi",$test);
       echo "<TR> <TD>str_replace</TD> <TD>alle 'hallo' ersetzt
             durch 'hi'</TD> <TD>$rp</TD> </TR>";
    echo "</TABLE>";
    ?>
    </body>
    </html>
## J.2 Zeichenketten und Arrays Arrays, Separatoren Mit Hilfe der Funktion explode() kann eine Zeichenkette in ein Array umgewandelt werden. Die Zeichenkette wird bei jedem Auftreten einer sogenannten »Separator-Zeichenkette« getrennt. Diese Separator-Zeichenkette kann aus einem einzelnen Zeichen wie z. B. einem Leerzeichen oder einem Semikolon, aber auch aus mehreren Zeichen bestehen. Anschließend können die einzelnen Elemente des Arrays mit den Methoden und Funktionen für Arrays weiter bearbeitet werden. Den umgekehrten Vorgang, nämlich das Erzeugen einer Zeichenkette aus einem Array, zusammen mit einem Separator-String, ermöglicht die Funktion implode(). Ein Beispiel:
Abbildung J.3 Zeichenketten und Arrays
Es folgt der Programmcode: Listing J.3 Datei uj02.php
    <html>
    <body>
    <?php
       $test = "Dies ist ein kurzer Satz";
       $worte = explode(" ",$test);
       $lg = sizeof($worte);
       for($i=0; $i<$lg; $i++)
       {
          echo "Wort $i: $worte[$i] <br>";
       }
       echo "<p>";

       $feld = array(17.5, 19.2, 21.8, 21.6, 17.5);
       $test = implode(";",$feld);
       echo "Eine Zeichenkette:<br>$test";
    ?>
    </body>
    </html>
Mit Hilfe der Funktion explode() wird die Zeichenkette $test in ein Array verwandelt. Jedes Leerzeichen wird als Separator zum nächsten Array-Element angesehen. Anschließend wird mit Hilfe der Array-Funktion sizeof() die Größe des Arrays festgestellt. Eine for-Schleife dient dazu, jedes Element des Arrays einzeln und nummeriert auszugeben. Der Array $feld umfasst 5 Elemente. Diese Elemente werden mit Hilfe der Funktion implode() und einiger Semikola in die Zeichenkette $test zusammengeführt. ## J.3 Teil-Zeichenketten Extraktion von Teilstrings Teile von Zeichenketten können mit verschiedenen Methoden extrahiert werden. Bei Nutzung der Funktion substr() wird angegeben, ab welcher Position innerhalb des Strings und über welche Länge hinweg extrahiert werden soll:
| Falls der zweite Parameter der Funktion substr() positiv ist, beginnt die zurückgegebene Teil-Zeichenkette ab der angegebenen Nummer vom Beginn des Originals aus gemessen. Die Nummer des ersten Zeichens des Originals ist 0.
| Falls der zweite Parameter der Funktion substr() negativ ist, beginnt die zurückgegebene Teil-Zeichenkette ab der angegebenen Nummer vom Ende des Originals aus gemessen.
| Falls der dritte Parameter der Funktion substr() existiert und positiv ist, werden entsprechend viele Zeichen zurückgegeben.
Bei Nutzung der Funktion strstr() wird ein Zeichen oder eine Zeichenkette angegeben, ab dessen/deren erstem Auftreten bis zum Ende des Strings extrahiert werden soll. Die Funktion stristr() führt das Gleiche aus, in diesem Falle aber unabhängig von der Groß- und Kleinschreibung des Vergleichsstrings. Die Funktion strrchr() sucht nach dem letzten Auftreten eines einzelnen Zeichens und extrahiert ab dieser Stelle. Ein Beispiel:
Abbildung J.4 Teil-Zeichenketten
Es folgt der Programmcode: Listing J.4 Datei uj03.php
    <html>
    <body>
    <?php
       $test = "info@rz.uni-hannover.de";
       echo "Teil-Zeichenketten:<p>";
       echo "<TABLE BORDER>";
       echo "<TR> <TD>Funktion</TD> <TD>Erläuterung</TD>
             <TD>Ergebnis</TD> </TR>";
       echo "<TR> <TD>&nbsp;</TD> <TD>Original</TD>
             <TD>$test</TD> </TR>";
       $sub1 = substr($test,3);
       echo "<TR> <TD>substr</TD> <TD>ab Zeichen 3 bis Ende</TD>
             <TD>$sub1</TD> </TR>";
       $sub2 = substr($test,3,5);
       echo "<TR> <TD>substr</TD> <TD>ab Zeichen 3,
             5 Zeichen</TD> <TD>$sub2</TD> </TR>";
       $sub3 = substr($test,-5);
       echo "<TR> <TD>substr</TD> <TD>ab fünftletztem
             Zeichen bis Ende</TD> <TD>$sub3</TD> </TR>";
       $sub4 = substr($test,-5,2);
       echo "<TR> <TD>substr</TD> <TD>ab fünftletztem Zeichen,
             2 Zeichen</TD> <TD>$sub4</TD> </TR>";
       $xdomain = strstr($test, "@");
       echo "<TR> <TD>strstr</TD> <TD>ab Zeichen @,
             bis Ende</TD> <TD>$xdomain</TD> </TR>";
       $domain = substr($xdomain,1);
       echo "<TR> <TD>substr</TD> <TD>hinter Zeichen @,
             bis Ende</TD> <TD>$domain</TD> </TR>";
       $xcountry = strrchr($test, ".");
       echo "<TR> <TD>strrchr</TD> <TD>ab letztem Zeichen
             'Punkt', bis Ende</TD> <TD>$xcountry</TD> </TR>";
       $country = substr($xcountry,1);
       echo "<TR> <TD>substr</TD> <TD>hinter letztem Zeichen
             'Punkt', bis Ende</TD> <TD>$country</TD> </TR>";
       echo "</TABLE>";
    ?>
    </body>
    </html>
## J.4 Suchen in Zeichenketten Suchen nach Zeichen Die Funktionen strpos() und strrpos() dienen zum Suchen nach bestimmten Zeichen oder Zeichenketten innerhalb anderer Zeichenketten. Es wird die Position zurückgeliefert, an der etwas gefunden wurde. Dabei sucht
| die Funktion strpos() ohne Offset-Angabe nach dem ersten Vorkommen des Zeichens oder der Zeichenkette,
| die Funktion strpos() mit Offset-Angabe nach dem ersten Vorkommen des Zeichens oder der Zeichenkette ab dem Offset,
| die Funktion strrpos() nach dem letzten Vorkommen eines Zeichens (keiner Zeichenkette).
Ein Beispiel:
Abbildung J.5 Suchen nach Zeichenketten
Hier der Programmcode: Listing J.5 Datei uj04.php
    <html>
    <body>
    <?php
       $test = "info@edvgruppe.biologie.uni-hannover.de";

       echo "Suchen in Zeichenketten:<p>";
       echo "<TABLE BORDER>";
       echo "<TR> <TD>Funktion</TD> <TD>Erläuterung</TD>
             <TD>Ergebnis</TD> </TR>";
       echo "<TR> <TD>&nbsp;</TD> <TD>Original</TD>
             <TD>$test</TD> </TR>";
       $pos1 = strpos($test,".");
       echo "<TR> <TD>strpos</TD> <TD>Position des ersten
             Zeichens 'Punkt'</TD> <TD>$pos1</TD> </TR>";
       $pos2 = strpos($test,".",15);
       echo "<TR> <TD>strpos</TD> <TD>Position des ersten
             Zeichens 'Punkt', ab Position 10</TD>
             <TD>$pos2</TD> </TR>";
       $pos3 = strrpos($test,".");
       echo "<TR> <TD>strrpos</TD> <TD>Position des letzten
             Zeichens 'Punkt'</TD> <TD>$pos3</TD> </TR>";
       echo "</TABLE>";
    ?>
    </body>
    </html>
## J.5 Vergleich von Zeichenketten Vergleiche Die Funktionen strcmp() und strcasecmp() dienen zum Vergleich von zwei Zeichenketten gemäß ihrer Reihenfolge im ASCII-Code. Dabei wird bei der Funktion strcmp() auf die Groß- und Kleinschreibung geachtet, bei der Funktion strcasecmp() hingegen nicht. Die Funktion similar_text() stellt fest, wie viele Zeichen innerhalb zweier Zeichenketten übereinstimmen. Ein Beispiel:
Abbildung J.6 Vergleich von Zeichenketten
Der Programmcode: Listing J.6 Datei uj05.php
    <html>
    <body>
    <?php
       $ErsterName = "Maier";
       $ZweiterName = "Mertens";
       $DritterName = "maier";
       echo "Mit Beachtung der Groß- und Kleinschreibung
            (strcmp):<p>";
       if (strcmp($ErsterName,$ZweiterName) < 0)
          echo "$ErsterName steht vor $ZweiterName<p>";
       else
          echo "$ZweiterName steht vor $ErsterName<p>";
       if (strcmp($ZweiterName,$DritterName) < 0)
          echo "$ZweiterName steht vor $DritterName<p>";
       else
          echo "$DritterName steht vor $ZweiterName<p>";
       echo "Ohne Beachtung der Groß- und Kleinschreibung
           (strcasecmp):<p>";
       if (strcasecmp($ZweiterName,$DritterName) < 0)
          echo "$ZweiterName steht vor $DritterName<p>";
       else
          echo "$DritterName steht vor $ZweiterName<p>";
       echo "Ähnlichkeit (similar_text):<p>";
       $erg1 = similar_text($ErsterName,$ZweiterName);
       $erg2 = similar_text($ErsterName,$DritterName);
       echo "Zwischen $ErsterName und $ZweiterName:
            $erg1 gleiche Buchstaben<p>";
       echo "Zwischen $ErsterName und $DritterName:
            $erg2 gleiche Buchstaben<p>";
    ?>
    </body>
    </html>
## J.6 Codierung von Zeichen ASCII-Code Jedem Zeichen einer Zeichenkette entspricht ein Zahlenwert gemäß der ASCII-Code-Tabelle. Dieser Code wird beim Speichern einer Zeichenkette intern verwendet. Vergleichsfunktionen wie strcmp() basieren auf dieser Reihenfolge innerhalb des ASCII-Codes. Die Code-Tabelle teilt sich in die folgenden Bereiche auf:
| Die Zeichen 0 bis 31 sind hauptsächlich Steuerzeichen zur Bildschirmsteuerung, also keine sichtbaren Zeichen
| Die Zeichen 32 bis 127 beinhalten u. a. die Ziffern 0 bis 9 (Code 48 bis 57), die Großbuchstaben (Code 65 bis 90), die Kleinbuchstaben (Code 97 bis 122) und Sonderzeichen wie z. B. Komma, Doppelpunkt, Semikolon usw.
| Die Zeichen 128 bis 255 beinhalten weitere Sonderzeichen, abhängig von der für den Rechner gewählten Codeseite und der Ländereinstellung
chr, ord Die Zeichenketten-Funktion chr([Zahlenwert]) liefert als Rückgabewert das Code-Zeichen des angegebenen Zahlenwertes. Die Funktion ord([Zeichen]) macht das Gegenteil, sie liefert die Code-Nummer zu dem angegebenen Zeichen. Das folgende Beispiel-Programm liefert dem Benutzer eine HTML-Tabelle der Zeichen von 32 bis 255, wie sie auf seinem Rechner verwendet werden:
Abbildung J.7 ASCII-Code
Zunächst der Programmcode: Listing J.7 Datei uj06.php
    <html>
    <body>
    <?php
       echo "<TABLE BORDER><TR>";
       for ($i=32; $i<=255; $i++)
       {
          echo "<TD>$i</TD><TD><B>" . chr($i) . "</B></TD>";
          if ($i%12 == 7) echo "</TR><TR>";
       }
       echo "</TR></TABLE>";
    ?>
    </body>
    </html>
Mit Hilfe des modulo-Operators (%) wurde dafür gesorgt, dass die HTML-Tabelle eine gleichmäßigen Aufbau hat. Falls die Division des aktuellen Code-Wertes durch 12 den Rest 7 ergibt, wird die aktuelle Zeile beendet und eine neue Zeile begonnen. Dies ist bei jedem 12. Code-Wert (43, 55, 67, 79 usw.) der Fall. ### J.6.1 Kryptographie Im nachfolgenden Programm wird mit Hilfe der o. a. Zeichenketten-Funktionen eine einfache Verschlüsselung eines eingegebenen Textes durchgeführt. Der Benutzer wird aufgefordert, einen Text einzugeben. Jedes einzelne Zeichen des Textes wird um einen Wert im ASCII-Code nach vorne verschoben und anschließend sowohl auf dem Bildschirm als auch in eine Text-Datei ausgegeben. Aus einem »g« wird ein »h«, aus einer »4« wird eine »5«, aus einem »X« wird ein »Y« usw. Verschlüsselung Schon diese einfache Verschlüsselung führt zu einem schwer lesbaren Text. Die Entschlüsselung ist nur möglich, wenn man die Verschlüsselungs-Methode kennt. Diese ist natürlich in diesem Fall noch recht einfach. Man kann sich vorstellen, daß aufwendigere Methoden zu einem Ergebnis führen, das nicht mehr so einfach zu entschlüsseln ist. Zunächst das Formular zum Eintragen des Satzes: Listing J.8 Datei uj07.htm
    <html>
    <body>
    Tragen Sie einen Satz zum Verschlüsseln ein,
    und senden Sie das Formular ab<br>
    <form action = "uj07.php" method = "post">
    <input name="test" size="50"><p>
    <input type="submit" value="Absenden"><p>
    </form>
    </body>
    </html>
Das Programm mit der Verschlüsselung: Listing J.9 Datei uj07.php
    <html>
    <body>
    <?php
       echo "$test <p>";
       // Länge der Zeichenkette
       $lg = strlen($test);
       // Datei zum Schreiben öffnen und sperren
       $fp = fopen("uj07data.txt","w");
       if ($fp)
          flock($fp,2);
       else
       {
          echo "Datei konnte nicht zum";
          echo " Schreiben geöffnet werden";
       }
       // Jedes Zeichen einzeln umwandeln
       for($i=0; $i<$lg; $i++)
       {
          // ein Zeichen extrahieren
          $char = substr($test,$i,1);
          // Code des Zeichens feststellen
          $code = ord($char);
          // Code des neuen Zeichens ermitteln
          $newcode = $code + 1;
          // Neues Zeichen erzeugen, ausgeben
          $newchar = chr($newcode);
          echo $newchar;
          // Zusätzlich in Datei ausgeben
          if ($fp) fputs ($fp, $newchar);
       }
       // Sperre aufheben, schließen
       if ($fp)
       {
          flock($fp,3);
          fclose($fp);
       }
    ?>
    </body>
    </html>
Die Methoden zum Öffnen, Sperren und Schreiben einer Text-Datei finden sich im Abschnitt G (Text-Dateien). Jedes einzelne Zeichen des eingegebenen Textes wird einzeln mit der Funktion substr() extrahiert. Der Code-Wert des Zeichens wird mit der Funktion ord() festgestellt. Dieser Code-Wert wird um 1 erhöht. Das Zeichen zum neuen Code-Wert wird mit der Funktion chr() ermittelt. Es wird auf dem Bildschirm und in die Text-Datei ausgegeben. Ein Beispiel: Aus dem Satz
    Das ist ein einfacher Satz
wird durch die Verschlüsselung:
    Ebt!jtu!fjo!fjogbdifs!Tbu{
#### Übung UJ08 Entschlüsselung Erstellen Sie ein Entschlüsselungs-Programm für die o. a. Verschlüsselungs-Methode. Es soll eine Text-Datei geöffnet werden, die in der ersten Zeile einen verschlüsselten Text beinhaltet. Jedes Zeichen der Zeile soll gelesen werden, mit der passenden Entschlüsselungs-Methode umgewandelt und auf dem Bildschirm ausgegeben werden. Es muß also der Code eines jeden einzelnen Zeichens um 1 vermindert werden (Datei uj08.php).
<< zurück | <top> | vor >>
Zum Katalog
PHP 4 bestellen
Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen? Ihre Meinung

Noch Fragen?
Tauschen Sie sich mit anderen Lesern aus Zum Forum

Empfehlung
| PHP 4-Workshop

Neue Bücher
Einstieg in Python JavaScript (4. Aufl.) CSS Praxis Einstieg in XML

Empfehlung
| MySQL 4

Shopping
Versandkostenfrei bestellen in Deutschland und Österreich Info

MyGalileo
Der Service für registrierte Leser: Info

Copyright © Galileo Press GmbH 2001 - 2002
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken und speichern. Ansonsten unterliegt das <openbook> denselben Bestimmungen wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.
Die Veröffentlichung der Inhalte oder Teilen davon bedarf der ausdrücklichen schriftlichen Genehmigung von Galileo Press. Falls Sie Interesse daran haben sollten, die Inhalte auf Ihrer Website oder einer CD anzubieten, melden Sie sich bitte bei: stefan.krumbiegel@galileo-press.de

[Galileo Computing]
Galileo Press GmbH, Gartenstraße 24, 53229 Bonn, fon: 0228.42150.0, fax 0228.42150.77, info@galileo-press.de