Christian Seiler: Redaktionssystem ohne Datenbank

Beitrag lesen

Hallo,

$title[$x] = eregi_replace("(","openbrotsch",$title[$x]);

Du verwendest eregi_replace - das erwartet einen regulären Ausdruck und in regulären Audrücken haben Klammern eine besondere Bedeutung. str_replace ist hier besser - das erwartet eine Zeichenkette. Verwende Funktionen mit regulären Ausdrücken nur, wenn Du die Mächtigkeit von regulären Ausdrücken auch brauchst. Sonst büßt Du an Geschwindigkeit ein und stößt auf solche Probleme.

//openbrotsch weil dieses string unwahrscheinlich auftauchen wird und es spass macht

Trotzdem solltest Du lieber so maskieren, dass das maskierte Zeichen _nie_ in der Zeichenkette auftreten kann.

(
Macht das irgendwie Sinn?

Ja, denn mit dem \ maskierst Du die Klammer.

Und kannst Du mir vielleicht sagen, wo ich Erklärungen zu den Ausdrücken in den "Warning"-Meldungen finde, zum Beispiel eben REG_EPAREN?

Keine Ahnung, ich verwende nur str_replace und preg_replace. Die ereg-Funktionen sollte man nicht verwenden, da einmal langsam und zum zweiten nicht binärsicher.

Also:

function maskiere ($zeichenkette) {
  $ersetzungen = array (
    '!' => '!!',
    '(' => '!o',
    ')' => '!g',
    '#' => '!r',
    '%' => '!p'
  );
  $von = array_keys ($ersetzungen);
  $nach = array_values ($ersetzungen);

return str_replace ($von, $nach, $zeichenkette);
}

function demaskiere ($zeichenkette) {
  $ersetzungen = array (
    '(' => '!o',
    ')' => '!g',
    '#' => '!r',
    '%' => '!p',
    '!' => '!!'
  );
  $nach = array_keys ($ersetzungen);
  $von = array_values ($ersetzungen);

return str_replace ($von, $nach, $zeichenkette);
}

Erklärung: In $ersetzungen stehen jeweils die unterschiedlichen Maskierungen. Bei maskiere() muss das Ausrufezeichen ganz am Anfang stehen, das muss zu erst maskiert werden. (sonst passiert das doppelt) Bei demaskiere() muss das Ausrufezeichen ganz hinten stehen, das muss zuletzt demaskiert werden. (sonst gibt es murks)

array_keys holt sich alle Schlüssel eines assoziativen Arrays, also stehen im Ergebnis dann '(', ')', '#', '%' und '!' drin.

array_values holt sich alle Werte eines assoziativen Arrays, also stehen im Ergebnis dann '!o', '!g', '!r', '!p' und '!!' drin.

Allen Ersetzungsfunktionen in PHP (str_replace, eregi_replace, preg_replace) kann man statt Zeichenketten auch Arrays übergeben, dann wird jedes einzelnen Element dieser abgearbeitet.

Wenn dazu noch Fragen sind, stelle sie.

Dein anderer Vorschlag habe ich nicht ignoriert, nur ich werde dafür viel mehr Zeit brauchen weil ich noch nicht so fit bin, und die Leute hier wollen ihr Redaktionssystem gleich benutzen.

Klar. Folgender Thread ist vielleicht interessant: </archiv/2002/12/32932/> (auch wenn er gegen Ende etwas abdriftet...)

Christian

--
Hast Du einen Beitrag? Nur her damit!
http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[