preg_replace
Michael W.
- php
0 Cheatah0 Michael W.
Hallo,
Auf der Seite http://www.michaelwoelk.de/test/index.htm befindet sich ein Formular. auf der darauf folgenden seite wird der eingegebene text einmal als original ausgegeben und einmal mit einem zeichen vor jeder zeile und einem zeichen am ende jener zeile...
und genau da liegt mein problem:
<?php
$message = nl2br($message);
print "$message<hr>";
$message = preg_replace ('/^/m', '»» ', $message);
$message = preg_replace ('<br>', '*', $message);
$message = nl2br($message);
print "$message<hr>";
?>
wie muss es richtig lauten? damit die ausgabe so aussieht wie ich es mir gedacht habe nämlich so:
Hallo, das ist ein text
Hallo, das ist ein text*
Bin für jeden Tipp dankbar
MfG
Michael W.
Hi,
$message = preg_replace ('<br>', '*', $message);
Deine Problembeschreibung könnte noch ein ganz klein wenig genauer sein; aber an dieser Stelle frage ich mich, warum Du jedes Vorkommen der Zeichenkette "br" durch ein "*" ersetzt, und warum Du zu diesem Zweck unbedingt teure Regular Expressions verwenden möchtest, anstatt einem schlichten String-Replace.
Soll heißen: Sieh noch mal genauer nach, was Du da eigentlich tust und überlege Dir, was Du in Wirklichkeit tun _möchtest_.
Cheatah
tolle antwort, danke :-(
was ich will???
ich will wissen wie ich ein zeichen an den zeilenanfang schreiben kann damit mein vorher eingegebener satz...
Hallo,
Das ist ein
Test
...so aussieht
Hallo,
Das ist einTest
anstatt dem >> halt das andere zeichen da, ist ja jetzt auch egal.
und genauso möchte ich das auch mit dem zeilen ende machen. ich hab mir gedacht wenn das mit dem zeilenanfang mit $message = preg_replace() geht, dann geht das auch mit dem zeilenende und da lag ich mit <br> nicht verkehrt. und wenn man '<br>' durch ' *<br>' erstzen würde, würde das rauskommen
Hallo, *
Das ist ein *
*
Test *
und genau das habe ich aber nicht geschafft und möchte eure hilfe...
MfG
MichaeL W.
Morgen.
tolle antwort, danke :-(
Cheatah hat durchaus recht mit dem, was er sagt.
was ich will???
Verwirrt???
ich will wissen wie ich ein zeichen an den zeilenanfang schreiben kann
[...]
und genauso möchte ich das auch mit dem zeilen ende machen.
Also, machen wir das simpel, wir wollen was??? Ach so, lustige Sachen vorne und hinten an andere lustige Sachen dranhängen.
Gut, fangen wir also mit so einer Eingabe hier an:
$input = "Hallo,
Das ist ein
Test.";
Die sieht als Einzeiler so aus (auf die \r's wird im Folgenden verzichtet):
Hallo,\nDas ist ein\n\nTest.
So weit, so gut.
Und wir wollten was??? Ach so, irgendwas, was so aussieht:
$output = ">> Hallo, *
Das ist ein *
*
Test. *";
Und das sieht als Einzeiler so aus:
Hallo, *\n>> Das ist ein *\n>> *\n>> Test. *
Wenn wir jetzt die Eingabe mit der Ausgabe vergleichen fällt was auf? -- Richtig (wobei die A's, V's und Strichlein nur als Pfeile dienen sollen):
Hallo,\nDas ist ein\n\nTest.
AA AAAA
\__ \ \___________
\ \________ \
\ \ \
VVV VVVVVVV VVVVVVVVVVVVVV VV
Hallo, *\n>> Das ist ein *\n>> *\n>> Test. *
Offensichtlich ist am Anfang der Zeichenkette ein ">> " und am Ende ein " *" hinzu gekommen. und die Zeilenumbrüche scheinen durch " *\n>> " ersetzt worden zu sein. Also kommen wir auf folgende Anweisung:
$output = ">> ".str_replace("\n"," *\n>> ",$input)." *";
Wenn jetzt noch <br>s dazu kommen sollen, können die gleich beim Ersetzten vor dem \n und nach dem * eingefügt werden:
$output = ">> ".str_replace("\n"," *<br>\n>> ",$input)." *";
So, und damit das sofort ausprobierbar ist, folgendes:
<?php
$input = "Hallo,
Das ist ein
Test.";
$output = ">> ".str_replace("\n"," *<br>\n>> ",$input)." *";
print $output;
?>
Und wie du siehst, so schwer ist es nicht gewesen.
Gruß
Norbert
;-) gibts von mir und ein Falsch
wenn ich über ein formular ein text eingebe und anschließend nach \n suche klappt das nicht mehr ich muss nach <br>s suchen, oder etwa nicht?
soweit wie du war ich schon lange...
http://www.michaelwoelk.de/test/index.php machts deutlich.
die antwort auf die ich hoffte war sowas wie du musst anstatt nach <br>s zu suchen das so eingeben <br >... oder irgendwie sowas...
oder irgendwelche tricks von denen ich ja nchts wissen kann...
es muss (un)bedingt mit dem formular funktionieren - wie muss der qt für die seite index.php (das ist die darauffolgende seite von dem formular index.htm) aussehen?
MfG
Michael W.
Hallo.
;-) gibts von mir und ein Falsch
Hui.
wenn ich über ein formular ein text eingebe und anschließend nach \n suche klappt das nicht mehr ich muss nach <br>s suchen, oder etwa nicht?
Zeilenumbrüche aus <textarea>s werden mit \n gekennzeichnet, da gibt es keine <br>s.
soweit wie du war ich schon lange...
Das glaube ich nicht.
http://www.michaelwoelk.de/test/index.php machts deutlich.
Macht was deutlich? Das meine Variante funktioniert und deine nicht? -- Ja, das macht es deutlich.
die antwort auf die ich hoffte war sowas wie du musst anstatt nach <br>s zu suchen das so eingeben <br >... oder irgendwie sowas...
oder irgendwelche tricks von denen ich ja nchts wissen kann...
Wenn du doch schon weißt, welche Antwort du willst, wieso fragst du dann noch.
es muss (un)bedingt mit dem formular funktionieren
Was jetzt bedingt oder unbedingt?
wie muss der qt für die seite index.php (das ist die darauffolgende seite von dem formular index.htm) aussehen?
Dein Formular sieht z.B. so aus:
<form action="index.php">
<textarea name="input"></textarea>
<input type="submit">
</form>
und deine PHP-Datei enthält das folgende:
<?php
parse_str($QUERY_STRING);
$output = ">> ".str_replace("\n"," *<br>\n>> ",$input)." *";
print $output;
?>
So und wo geht da jetzt was nicht?
Gruß
Norbert
Du hast es voll raus!
Danke
mal was anderes:
wonach muss ich eigentlich suchen wenn ich nach nem zeilenanfang suche
$message = preg_replace ('/^/m', '» ', $message);
/^/m
was soll das sein?
dann müsste ich auch für das zeilenende nicht nach <br>s suchen sondern nach irgendwas anderes...
für was die slashes und so?
und warum führt folgende abfrage zu fehler:
if(eregi('» ',$message))
{
//$message = preg_replace ('» ', '', $message);
$message = preg_replace ('/^/m', '»', $message);
}
else
{
$message = preg_replace ('/^/m', '» ', $message);
}
der auskommentierte befehl war der böse wicht: einerseits sagt er bei der if else abfrage true (ja es gibt das zeichen in $message) und andererseits sagt das script dann nein - fehler, das geht nicht bei dem auskommentierten befehl...
was soll das?
gibt es noch eine andere regel für preg_replace?
MfG
Michael W.