Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort
Vorwort
1 PEAR – Einführung
2 Authentication
3 Caching
4 Date and Time
5 File Formats
6 HTTP
7 Internationalization
8 Mail
9 Networking
10 PHP
11 Text
12 Web Services
13 Benchmarking
14 Configuration
15 Database
16 File System
17 HTML
18 Images
19 Logging
20 Math
21 Numbers
22 Tools and Utilities
23 XML
24 Selbst Pakete erstellen
25 PECL
Index
Ihre Meinung?

Spacer
 <<   zurück
PHP PEAR von Carsten Möhrke
Anwendung und Entwicklung – Erweiterungen für PHP schreiben
Buch: PHP PEAR

PHP PEAR
798 S., 39,90 Euro
Rheinwerk Computing
ISBN 3-89842-580-0
gp 17 HTML
  gp 17.1 HTML_BBCodeParser
  gp 17.2 HTML_Crypt
  gp 17.3 HTML_Page2
    gp 17.3.1 Methoden zur Manipulation des Heads
    gp 17.3.2 Methoden zur Manipulation des Bodys
    gp 17.3.3 Ausgabe der HTML-Daten
  gp 17.4 HTML_CSS
    gp 17.4.1 Ausgabe des Stylesheets
  gp 17.5 HTML_Javascript
  gp 17.6 HTML_Template_IT
  gp 17.7 HTML_Template_Flexy
    gp 17.7.1 Fomulare in Flexy
    gp 17.7.2 Plugins
  gp 17.8 HTML_Form
  gp 17.9 HTML_QuickForm
    gp 17.9.1 Standard-Formularelemente
    gp 17.9.2 Erweiterte Formularelemente
    gp 17.9.3 Gruppen
    gp 17.9.4 Verarbeitung des Formulars
    gp 17.9.5 Filter
    gp 17.9.6 Serverseitige Validierung
    gp 17.9.7 Clientseitige Validierung
    gp 17.9.8 Datei-Uploads
    gp 17.9.9 Templates
  gp 17.10 HTML_QuickForm_Controller
  gp 17.11 HTML_Menu
  gp 17.12 HTML_TreeMenu
  gp 17.13 HTML_Progress
  gp 17.14 HTML_Table
  gp 17.15 HTML_Table_Matrix
  gp 17.16 Pager

17 HTML

Es liegt in der Natur der Sache, dass PHP primär zum Generieren von Webseiten verwendet wird. Daher ist in PEAR eine recht stattliche Anzahl von Paketen vorgesehen, um Sie beim Umgang mit HTML zu unterstützen.

Die meisten der HTML-Pakete basieren auf dem Paket HTML_Common. Da dieses Paket nur dann sinnvoll einzusetzen ist, wenn man selbst PEAR_HTML-Pakete entwickelt, erläutere ich es hier nicht weiter. Einen Punkt möchte ich allerdings aufgreifen. Die Pakete verwenden fast alle HTML_Common, um Attribute von HTML-Tags zu verwalten. Rufen Sie eine Methode auf, der Sie Attribute für ein Tag übergeben können, so können Sie die Attribute immer als String oder als Array übergeben. Die beiden folgenden Aufrufe sind als äquivalent:

$obj->methode('width="100  %", border="1"'); 
$obj->methode(array ( 
                    'width'=>'100  %', 
                    'border'='1' 
              ));

Rheinwerk Computing

17.1 HTML_BBCodeParser  toptop


Besprochene Version: 1.1 Lizenz: PHP-Lizenz
Klassendatei(en): HTML/BBCodeParser.php

Wenn Sie ein Gästebuch oder ein Forum programmieren möchten, stehen Sie immer wieder vor demselben Problem. Benutzer, die Sie nicht kennen, können freien Text eingeben, der später in einem Browser dargestellt wird. Grundsätzlich ist das ja nichts Schlimmes und auch das Ziel eines Gästebuchs. Allerdings könnte ein Benutzer z. B. auch so etwas eingeben:

<script type="text\javascript"> 
  window.alert("Ihr Rechner wurde gehackt"); 
</script>

In diesem Fall würde bei jedem Aufruf des Gästebuchs ein Fenster erscheinen, in dem »Ihr Rechner wurde gehackt« steht. Das ist nicht wirklich schön, wenn Sie das Gästebuch für einen Firmenkunden erstellt haben. Allerdings ist das noch ein harmloses Beispiel. Man kann dort auch deutlich unangenehmere Sachen machen. Natürlich könnten Sie die Daten jetzt einfach mit strip_tags() oder htmlspecialchars() bearbeiten, was allerdings den Nachteil mit sich bringt, dass die User Ihren Text nicht verschönern oder Links einbauen können.

Ein möglicher Ausweg ist die Nutzung von BBCode. BBCode ist die Abkürzung für »Bulletin Board Code«. Hierbei handelt es sich um einen Code, der stark an HTML angelehnt ist, wobei die Kleiner-als- und Größer-als-Zeichen üblicherweise durch eckige Klammern ersetzt werden. Das bietet den Vorteil, dass Sie etwaige HTML-Codes einfach herausfiltern oder mit htmlspecialchars() konvertieren können. Wenn das geschehen ist, können Sie die BBCodes nach HTML konvertieren. Somit können Sie sicher sein, dass kein unerlaubter Code eingeschleust wird, und der Benutzer hat gleichzeitig die Möglichkeit, seine Eingaben mit HTML zu gestalten.

Die Nutzung des Pakets ist erfreulich unproblematisch, wie Sie in Listing 17.1 sehen können.

require_once('HTML/BBCodeParser.php'); 
 
// Dieser Text wuerde normalerweise aus einem Formular kommen 
$text="Dies ist ein [b]fetter[/b] Text"; 
 
// Neuen Parser instanziieren 
$bbparser = new HTML_BBCodeParser(); 
 
// Fehler aufgetreten? 
if (true===PEAR::isError($bbparser)) 
{ 
   die ($bbparser->getMessage()); 
} 
 
$bbparser->setText($text); 
$bbparser->parse(); 
$bbparsed = $bbparser->getParsed(); 
echo $bbparsed; 
// Ausgabe: Dies ist ein <strong>fetter</strong> Text

Listing 17.1 Konvertieren von BBCodes

Der Konstruktor benötigt keinen Parameter, obgleich er einen akzeptiert, wie Sie gleich sehen werden. Wichtig ist allerdings, dass Sie seinen Rückgabewert auf einen Fehler prüfen. Da er direkt Dateien einbindet, könnte es hier natürlich immer mal zu Problemen kommen.

Den zu parsenden Text übergeben Sie mit der Methode setText(), die ihn direkt im Objekt ablegt. Sollte hier schon ein Text enthalten sein, wird dieser überschrieben. Für das Übersetzen der Codes von BB- nach HTML-Code ist die Methode parse() zuständig.

Um die konvertierten Daten wieder aus dem Objekt auszulesen, steht getParsed() zur Verfügung.

Diese Vorgehensweise ist recht transparent und bietet den Vorteil, dass die einzelnen Schritte gut nachvollziehbar sind. Sollten Ihnen diese drei Einzelschritte zu langwierig erscheinen, können Sie auch die Methode qparse() nutzen.

echo $bbparser->qparse($text);

Sie erledigt alle drei Schritte auf einmal.

Wie schon erwähnt, akzeptiert der Konstruktor einen Parameter. Hierbei handelt es sich um ein Array, mit dem das Verhalten des resultierenden Objekts beeinflusst wird. Ein solches Array kann folgenden Aufbau haben:

$options = array( 'quotestyle' => 'single', 
                  'quotewhat' => 'all', 
                  'open' => '[', 
                  'close' => ']', 
                  'xmlclose' => true, 
                  'filters' => 'Basic' 
                 );

Der Schlüssel quotestyle legt fest, ob die Attributwerte, also in <font color="red"> z. B. das red, in einfache oder doppelte Anführungszeichen eingeschlossen werden sollen. Mögliche Werte sind hier single für einfache Anführungszeichen oder double für doppelte Anführungszeichen.

Der Schlüssel quotewhat legt fest, welche Arten von Attributwerten mit Anführungszeichen versehen werden sollen. Der hier gewählte Wert all legt fest, dass alle Arten von Attributen in Anführungszeichen gesetzt werden, wohingegen der Wert nothing dafür sorgt, dass gar keine Anführungszeichen genutzt werden. Der dritte mögliche Wert ist strings. Er definiert, dass alle nicht numerischen Werte in Anführungszeichen verpackt werden.

Die Schlüssel open und close definieren, welche Zeichen als Ersatz für die Kleiner-als- und Größer-als-Zeichen von HTML genutzt werden. Üblich sind hierbei die eckigen Klammern, wobei in einigen Foren oder Gästebüchern auch geschweifte Klammern Verwendung finden.

Mit xmlclose können Sie definieren, ob die Tags so geschlossen werden sollen, wie es in XHTML vorgeschrieben ist. Wo in HTML noch ein <br> ausreichend war, ist in XHTML ein <br /> vorgeschrieben. Übergeben Sie hier ein true, werden leere Elemente entsprechend dieses Schemas mit einem inkludierten Slash abgeschlossen.

Das letzte Element ist das spannendste. Hiermit können Sie definieren, welche BBCodes zulässig sind. Diese sind nämlich in Gruppen zusammengefasst. Die einzelnen Gruppennamen werden hier in einem String übergeben, wobei die einzelnen Namen durch ein Komma zu trennen sind. Mit dem Wert 'Basic,Extended,Email' würden also die Befehlsgruppen Basic, Extended und Email eingebunden. Insgesamt sind die sechs Gruppen Basic, Extended, Email, Images, Links und Lists vorgesehen. Welche Befehle in den Gruppen definiert sind, sehen Sie in Tabelle 17.1.


Tabelle 17.1 Befehlsgruppen im BBCode
Gruppe Interpretierte Befehle Ausgabe
Basic [b]bold[/b] Fette Darstellung
  [i]italic[/i] Kursiv
  [u]underline[/u] Unterstrichen
  [s]strike[/s] Durchgestrichen
  [sub]subscript[/sub] Tiefgestellt
  [sup]superscript[/sup] Hochgestellt
     
Extended [color=farbe]bunt[/color] Text erscheint in farbe.
  [size=groesse]groß[/size] Schrift erscheint in groesse.
  [font=schrift]Schriftart[/font] Schrift erscheint in Schriftart schrift.
  [align=alignment]Ausrichtung[/align] Text wird entsprechend alignment (left, right, center) ausgerichtet.
  [quote=http://www.example.com]Zitat[/quote] Text wird als Zitat ausgezeichnet.
  [code]echo Hallo[/code] Formatiert Text als Code.
Link http://www.example.com URL wird als Link ausgegeben.
  [url]http://www.example.com[/url] URL wird als Link ausgegeben.
  [url=http://www.example.com]Link[/url] Link, wobei Link dargestellt wird.
  [url=http://www.example.com target=ziel]Link[/url] Link, bei dem das Target ziel direkt angesprungen wird
     
Email person@example.com Wird in E-Mail-Link konvertiert.
  [email]person@ example.com[/email] Wird in E-Mail-Link konvertiert.
  [email=person@example.com]Ziel[/email] E-Mail-Link mit Ziel als Text
     
Image [img]http://www.server.org/image.jpg[/img] Bindet die Grafik ein.
  [img w=100 h=200] http://www.server.org/image.jpg[/img] Bindet die Grafik ein und setzt die Höhen- und Breitenangaben.
     
Lists [ulist] [*] unsortierte Liste [/ulist] Unsortierte Liste
  [list=1] [*] sortierte Liste [/list] Sortierte Liste, die mit 1 beginnt. Zum Nummerieren können auch Buchstaben oder römische Ziffern genutzt werden.

Anzumerken ist, dass die Konvertierung von E-Mail-Adressen und Links alles konvertiert, was auch nur ansatzweise so aussieht, als könnte es ein Link oder eine E-Mail-Adresse sein. Das kann in einigen Fällen zu einem Fehlverhalten führen, was aber sicher zu verschmerzen ist.

 <<   zurück
     
  Zum Katalog
Zum Katalog: PHP PEAR
PHP PEAR
Jetzt bestellen!
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: PHP 5.6 und MySQL 5.7






 PHP 5.6 und
 MySQL 5.7


Zum Katalog: Einstieg in PHP 5.6 und MySQL 5.6






 Einstieg in PHP 5.6
 und MySQL 5.6


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Moderne Websites entwickeln






 Moderne Websites
 entwickeln


Zum Katalog: MySQL 5.6






 MySQL 5.6


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo








Copyright © Rheinwerk Verlag GmbH 2007
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. 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.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de