Re: Problem mit Ersetzen von [ durch <
Autor: T.Jung [Beiträge: 3267]
Datum: 07.02.2010 16:38:56
Zunächst einmal:
Leider »frisst« die Forumssoftware Backslashes. Man muss daher doppelte Backslashes setzen, damit ein einzelner sichtbar wird.
Das macht es natürlich etwas schwierig, Quellcode zu beurteilen, in denen Backslashes wichtig sind; denn ich weiß ja nun nicht, ob Du die Backslashes _tatsächlich_ vergessen hast, oder ob sie halt nur von der Forumssoftware entfernt worden sind.
> <?php
> $text = $_POST['textfeld'];
> echo $text .<br />;
> $search = array('/[','/]');
> $replace = array('<','>');
> $text2 = preg_replace($search,$replace,$text);
> echo $text2 ."<br />";
> ?>
>
> Ich bekomme jedoch folgenden Fehler angezeigt:
> Warning pref_match(): Compilation failed: missing
> terminating ] for character class at offset 3 in
> C:XAMPP... on line 30
Ein regulärer Ausdruck braucht einen »Begrenzer« am Anfang und am Ende -- dazu nimmt man üblicherweise (aber nicht zwangsläufig) den normalen Schrägstrich --; und gewisse Zeichen (die sog. Metazeichen) haben innerhalb von RegEx eine bestimmte Bedeutung -- dazu gehören auch die eckigen Klammern, die eine Zeichenklasse markieren.
Wenn Du diese Zeichen als solche suchen willst, musst Du sie per Backslash »maskieren«, dann weiß die RegEx-Engine: Aha, der will die eckige Klammer gar nicht als Metazeichen vewenden, sondern nach ihnen suchen.
Der Suchstring muss also folgendermaßen lauten:
$search = array('/\[/','/\]/');
> Ich habe es auch schon mit str_replace versucht.
> Damit funktioniert es auch solange, wie ich NUR
> eine eckige Klammer schreibe. Sobald ich aber
> "[u]hallo schreibe", wird mir gar nichts mehr
> angezeigt.
Hmmm?
Folgender Code funktioniert bei mir genauso, wie er soll:
<?php
$text = "[u]hallo[/u]";
$search = array('[', ']');
$replace = array('<','>');
$text2 = str_replace($search, $replace, $text);
echo $text2 . "<br>";
?>
> Kann mir einer vielleicht sagen, was ich aendern
> muss oder muss ich sogar auf einen besch****
> RegEx zurueckgreifen?
Erstens sind RegEx nicht beschissen, sondern ein äußerst hilfreiches und mächtiges Tool.
Zweitens sollte man sie nur einsetzen, a) wenn sie nötig sind, und b) wenn man sie versteht.
a) deshalb, weil sie langsamer sind als die Stringfunktionen;
b) deshalb, weil sie natürlich etwas kompliziert sind und sich deshalb leicht Fehler einschleichen.
Drittens _benutzt_ Du mit preg_replace() ja schon eine RegEx-Funktion, deshalb verstehe ich nicht ganz, warum Du nun fragst ob Du »sogar« darauf zurückgreifen musst...
Und nein, Du brauchst sie hier nicht, denn es geht Dir ja um ein recht einfaches ersetzen (alle eckigen Klammern durch spitze ersetzen); von daher ist hier str_replace() tatsächlich das richtige Mittel.
(Wobei es durchaus berechtigt ist, dass man zum Ersetzen des sog. BB-Codes normalerweise _doch_ RegEx nimmt, aber das ist wieder ein anderes Thema...)
HTH,
Tobias Jung
Zum Abschicken deines Beitrags bitte die Schaltfläche "Abschicken" nur einmal anklicken und warten. Der Server braucht manchmal
einige Zeit, bis er den Beitrag in die Datenbank übernommen hat. Wenn du die Schaltfläche mehrmals drückst, erscheint dein Beitrag
auch mehrmals im Forum.
|