Hallo!
Ich sitze hier gerade vor einem kleinen Skript, das mich in der Richtung Barrierefreiheit
ein wenig weiter bringen soll und einiges (lästiges) automatisieren soll.
Ziel des Skriptes ist es, im Text vorkommende Abkürzungen oder Acronyme in
die entsprechende HTML/XHTML-Variante zu bringen. Also ganz nach dem Motto "HTML"
wird zu <acronym title="Hypertext Markup Language" lang="en">HTML</acronym> usw.
Dazu habe ich eine Tabelle erstellt, in der alle notwendigen Informationen
gespeichert werden. Im Einzelnen sind das:
id: laufende ID (= Primärschlüssel)
abkuerzung: Abkürzung (z.B. HTML, XHTML etc)
erklaerung: Erklärung der Abkürzung (also Hypertext Markup Language usw.)
art: Art der Abkürzung (derzeit definiert: acronym, abbr, span, dfn)
sprache: Sprache der Erklärung (derzeit definiert: de, en, fr)
zeitstempel: UNIX-Timestamp, wann der Eintrag angelegt wurde (hat derzeit noch keine Verwendung)
Um nun einen entsprechenden Text zu analysieren und umzuwandeln, habe ich dann
folgende Funktion geschrieben:
Anmerkungen dazu:
Mit $trans wird der Text übergeben, der übersetzt werden soll.
Die Unterscheidung von "span" ist wichtig, um einen Sprachwechsel zu markieren
(ist so in der BITV gefordert).
Zum Ersetzen wird einfach die Funktion str_replace benutzt.
Der Text wird nun umgewandelt und dann wieder in die Datenbank geschrieben.
Wenn der Text dann neu bearbeitet wird, werden derzeit mit strip_tags alle
HTML-Elemente aus dem Text entnommen und dann der Text neu analysiert, wenn
er wieder in die Datenbank geschrieben wird.
Was sind nun meine Probleme damit:
Zunächst gibt es ein Problem, wenn ich gleichlautende Abkürzungen habe (z.B.
XHTML und HTML). Bei der Funktion str_replace wird nun sowohl "HTML", als auch
"XHTML" ersetzt, was dann zu einem etwas komischen und nicht richtigen Ergebnis
führt, da es zu einer Verschachtelung von acronym kommt, was nicht
beabsichtigt und gewollt ist.
Des weiteren macht die strip_tags-Funktion Probleme, da auch alle HTML-
Formatierungen damit flöten gehen. Wurden also komplexe Tabellen oder
Listen usw. erstellt, dann sind die auch weg. Ich weiß, dass man strip_tags ne
Liste von HTML-Elementen übergeben kann, die es stehen lassen soll. Gibt
es so was auch für den umgekehrten Fall, sprich ich sag der Funktion, was sie
löschen soll (wäre durchaus einfacher). Noch besser wäre natürlich eine
Funktion, die überprüft, ob es schon eine Umwandlung gibt und überprüft die
nur noch auf Richtigkeit (sollte sich in der Datenbank was geändert haben
o.ä. Schreibfehler passieren immer mal ;-)).
Die Funktion getAbbrev soll am Ende einen langen Text durch gehen und prüfen,
ob die in der Datenbank gespeicherten Abkürzungen vorkommen und diese
dann durch die Informationen in der Datenbank ersetzen. Eine Abfrage,
ob Groß-/Kleinschreibung wichtig ist, wäre vielleicht auch noch sinnvoll (kann
man ja auch noch entsprechend in der Datenbank hinterlegen).
Über Eure Hilfe und Kommentare wäre ich sehr dankbar. Alle, die sich mit
Barrierefreiheit beschäftigen wissen ja, welche Grausamkeiten es
dort gibt, und vielleicht kann man damit ein paar Sachen gut automatisieren.
Vielen Dank für Eure schnelle Hilfe!
Viele Grüße
Michael
Ich sitze hier gerade vor einem kleinen Skript, das mich in der Richtung Barrierefreiheit
ein wenig weiter bringen soll und einiges (lästiges) automatisieren soll.
Ziel des Skriptes ist es, im Text vorkommende Abkürzungen oder Acronyme in
die entsprechende HTML/XHTML-Variante zu bringen. Also ganz nach dem Motto "HTML"
wird zu <acronym title="Hypertext Markup Language" lang="en">HTML</acronym> usw.
Dazu habe ich eine Tabelle erstellt, in der alle notwendigen Informationen
gespeichert werden. Im Einzelnen sind das:
id: laufende ID (= Primärschlüssel)
abkuerzung: Abkürzung (z.B. HTML, XHTML etc)
erklaerung: Erklärung der Abkürzung (also Hypertext Markup Language usw.)
art: Art der Abkürzung (derzeit definiert: acronym, abbr, span, dfn)
sprache: Sprache der Erklärung (derzeit definiert: de, en, fr)
zeitstempel: UNIX-Timestamp, wann der Eintrag angelegt wurde (hat derzeit noch keine Verwendung)
Um nun einen entsprechenden Text zu analysieren und umzuwandeln, habe ich dann
folgende Funktion geschrieben:
PHP-Code:
function getAbbrev($trans) {
global $database;
$sql = "SELECT * FROM abbrev ORDER BY abkuerzung ASC";
$erg =& $database->query($sql);
$abr = $erg->fetchAll(MDB2_FETCHMODE_ASSOC);
for ($a = 0; $a < sizeof($abr); $a++) {
if ($abr[$a]["art"] == "span") {
$trans = str_replace($abr[$a]["abkuerzung"],"<"
.$abr[$a]["art"]." lang=\"".$abr[$a]["sprache"]."\">"
.$abr[$a]["abkuerzung"]."</".$abr[$a]["art"].">", $trans);
} else {
$trans = str_replace($abr[$a]["abkuerzung"],"<"
.$abr[$a]["art"]." title=\"".$abr[$a]["erklaerung"]
."\" lang=\"".$abr[$a]["sprache"]."\">"
.$abr[$a]["abkuerzung"]."</".$abr[$a]["art"].">", $trans);
}
}
return ($trans);
}
Mit $trans wird der Text übergeben, der übersetzt werden soll.
Die Unterscheidung von "span" ist wichtig, um einen Sprachwechsel zu markieren
(ist so in der BITV gefordert).
Zum Ersetzen wird einfach die Funktion str_replace benutzt.
Der Text wird nun umgewandelt und dann wieder in die Datenbank geschrieben.
Wenn der Text dann neu bearbeitet wird, werden derzeit mit strip_tags alle
HTML-Elemente aus dem Text entnommen und dann der Text neu analysiert, wenn
er wieder in die Datenbank geschrieben wird.
Was sind nun meine Probleme damit:
Zunächst gibt es ein Problem, wenn ich gleichlautende Abkürzungen habe (z.B.
XHTML und HTML). Bei der Funktion str_replace wird nun sowohl "HTML", als auch
"XHTML" ersetzt, was dann zu einem etwas komischen und nicht richtigen Ergebnis
führt, da es zu einer Verschachtelung von acronym kommt, was nicht
beabsichtigt und gewollt ist.
Des weiteren macht die strip_tags-Funktion Probleme, da auch alle HTML-
Formatierungen damit flöten gehen. Wurden also komplexe Tabellen oder
Listen usw. erstellt, dann sind die auch weg. Ich weiß, dass man strip_tags ne
Liste von HTML-Elementen übergeben kann, die es stehen lassen soll. Gibt
es so was auch für den umgekehrten Fall, sprich ich sag der Funktion, was sie
löschen soll (wäre durchaus einfacher). Noch besser wäre natürlich eine
Funktion, die überprüft, ob es schon eine Umwandlung gibt und überprüft die
nur noch auf Richtigkeit (sollte sich in der Datenbank was geändert haben
o.ä. Schreibfehler passieren immer mal ;-)).
Die Funktion getAbbrev soll am Ende einen langen Text durch gehen und prüfen,
ob die in der Datenbank gespeicherten Abkürzungen vorkommen und diese
dann durch die Informationen in der Datenbank ersetzen. Eine Abfrage,
ob Groß-/Kleinschreibung wichtig ist, wäre vielleicht auch noch sinnvoll (kann
man ja auch noch entsprechend in der Datenbank hinterlegen).
Über Eure Hilfe und Kommentare wäre ich sehr dankbar. Alle, die sich mit
Barrierefreiheit beschäftigen wissen ja, welche Grausamkeiten es
dort gibt, und vielleicht kann man damit ein paar Sachen gut automatisieren.
Vielen Dank für Eure schnelle Hilfe!
Viele Grüße
Michael
EDIT:
Text gebrochen ;-)
Kommentar