• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

eregi_replace

Status
Für weitere Antworten geschlossen.

Speider

Neues Mitglied
Hallo Leute,
ich habe zwei Dateien:
index.php:
Code:
<?php
function unterstrichen($text) {
  $unterstrichen = "[unterstrichen]";
  $unterstrichen2 = "[/unterstrichen]";
  $underline = "<span style='text-decoration:underline'>";
  $underline2 = "</span>";
  $anderlein = preg_replace($unterstrichen, $underline, $text);
  $anderlein2 = preg_replace($unterstrichen2, $underline2, $anderlein);
  return $anderlein2;
}
?>
<html>
<head>
<title>Testseite</title>
</head>
<body>
<?php
$datei = fopen("inhalt.txt","r");
$bbcode = fread($datei,1000);
echo unterstrichen($bbcode);
fclose($datei);
?>
<br><a href="bearbeiten.php">Admin</a><br>
<span style='text-decoration:underline'>der Test</span>
</body>
</html>
Und
inhalt.txt:
Code:
[unterstrichen]der Test[/unterstrichen]

Das Problem ist:
Dass nicht der Test unterstrichen angezeigt wird,
sondern:
[<pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'>]d<pa yl='x-doao:dl'><pa yl='x-doao:dl'> <pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'>[<pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'><pa yl='x-doao:dl'>]
Bitte helft mir.

MfG Speider
 
Zuletzt bearbeitet:
Werbung:
also erstmal ganz böser junge, egeg_* funktionen sollten nicht mehr benutzt werden, das was du brauchst ist

PHP: preg_replace - Manual

und dafür musst du mal nach "Regulären Ausdrücken" googeln ;)
 
Werbung:
Hab das mit dem preg_replace() gemacht.
@Patrick Leuppert:
Ich will aber einen individuellen BBCode(Ich weis, den anderen kann ich auch verändern)und nicht den ganz normalen.
Es soll ja für einen HTML-Unwissenden sein.
MfG Speider
 
Hallo,

so wie es jetzt implementiert ist, könntest du auch str_replace nehmen. Du willst mit dem Code ja nur [underline] und [/underline] ersetzen.

Für einen regulären Ausdruck muss das ganze anders aussehen:
Code:
return preg_replace("#\[underline](.*?)\[/underline]#i", "<span ...">$1</span>", $text);


N43
 
so wie es jetzt implementiert ist, könntest du auch str_replace nehmen. Du willst mit dem Code ja nur [underline] und [/underline] ersetzen.
Lass die finger von str_replace bei bbcodes. Wenn deine Seite von HTML unerfahrenen besucht wird (welche ist das nicht:lol:), kannst du nicht vorraussetzen das diese BBCodes wenigstens können

Stell dir folgendes vor

Wichtig: Ich bin ein BBCode noob

arbeitest du mit str_replace, kannst du dir ja denken was passiert, oder? Die Seite wird zerstört, da es kein </u> und </i> gibt.
BBCode ist dazu da, um sich vor so etwas zu schützen. Also immer reguläre ausdrücke mit preg_replace, es wird erst dann etwas ersetzt, wenn anfang und ende vorhanden ist.

gruß
 
Werbung:
Danke N43.
Jetzt wollte ich mehrere machen :
Code:
<?php
function unterstrichen($text) {
  $unterstrichen = preg_replace("#\[unterstrichen](.*?)\[/unterstrichen]#i", "<span style='text-decoration:underline'>$1</span>", $text);
  $dick = preg_replace("#\[dick](.*?)\[/dick]#i", "<span style='font-weight:bold'>$1</span>", $text);
  //return preg_replace("#\[unterstrichen](.*?)\[/unterstrichen]#i", "<span style='text-decoration:underline'>$1</span>", $text);
  $ausgabe = $unterstrichen . "<br>" . $dick;
  return $ausgabe;
}
?>
<html>
<head>
<title>Testseite</title>
</head>
<body>
<?php
$datei = fopen("inhalt.txt","r");
$bbcode = fread($datei,1000);
echo unterstrichen($bbcode);
fclose($datei);
?>
<br><a href="bearbeiten.php">Admin</a><br>
<span style='text-decoration:underline'>der Test</span>
</body>
</html>
Die Ausgabe ist:
Dieser Text ist unterstrichen [dick]Dieser Text ist dick[/dick][unterstrichen]Dieser Text ist unterstrichen[/unterstrichen] Dieser Text ist dick
Admin
der Test

Was habe ich jetzt schon wieder falsch gemacht??

MfG Speider
 
Zuletzt bearbeitet:
Muss ich schon wieder nachhelfen.
Oder kann mir keiner helfen??
Edit: In den Ferien hat man doch Zeit, oder?

MfG Speider
 
Hallo,

nur mal so am Rande. Für solche Ersetzungen braucht man gar nicht mit langsamen preg_ Methoden arbeiten. Str_replace ist hier um ein vielfaches schneller und ressourcenschonender. Der vermutlich einfachste und schnellste Weg ist allerdings:
PHP:
<?php

$text_mit_bb = "Dieser Text ist [unterstrichen]unterstrichen[/unterstrichen] [dick]Dieser Text ist dick[/dick]. [unterstrichen]Dieser Text ist unterstrichen[/unterstrichen] Dieser Text ist [rot][dick]rot und dick[/dick][/rot]";

$ersetzen = array(  '[unterstrichen]' => '<span style="text-decoration:underline;">',
					'[/unterstrichen]' => '</span>',
					'[dick]' => '<strong>',
					'[/dick]' => '</strong>',
					'[rot]' => '<span style="color: red;">',
					'[/rot]' => '</span>');

$text_ohne_bb = strtr( $text_mit_bb, $ersetzen );

echo '<p>' .$text_ohne_bb. '</p>';

?>
 
Werbung:
Hallo,

nur mal so am Rande. Für solche Ersetzungen braucht man gar nicht mit langsamen preg_ Methoden arbeiten. Str_replace ist hier um ein vielfaches schneller und ressourcenschonender. Der vermutlich einfachste und schnellste Weg ist allerdings:
PHP:
<?php

$text_mit_bb = "Dieser Text ist [unterstrichen]unterstrichen[/unterstrichen] [dick]Dieser Text ist dick[/dick]. [unterstrichen]Dieser Text ist unterstrichen[/unterstrichen] Dieser Text ist [rot][dick]rot und dick[/dick][/rot]";

$ersetzen = array(  '[unterstrichen]' => '<span style="text-decoration:underline;">',
                    '[/unterstrichen]' => '</span>',
                    '[dick]' => '<strong>',
                    '[/dick]' => '</strong>',
                    '[rot]' => '<span style="color: red;">',
                    '[/rot]' => '</span>');

$text_ohne_bb = strtr( $text_mit_bb, $ersetzen );

echo '<p>' .$text_ohne_bb. '</p>';

?>
Das Problem ist das:
PHP:
$text = "[unterstrichen]Hallo[/rot]";
 
Werbung:
Dann Probiere ich mal so wie es phpBuddy geschreiben hat.

und böswillige User machen einem das Layout kaputt ;)

N43
Ich habe aber keine Böswillige User, das ganze soll Kennwortgeschützt arbeiten.
Edit: Bringt dass dann was wenn ein "NOOB" den "Code" schreibt?

und:
PHP:
<?php

$text_mit_bb = "Dieser Text ist [unterstrichen]unterstrichen[/unterstrichen] [dick]Dieser Text ist dick[/dick]. [unterstrichen]Dieser Text ist unterstrichen[/unterstrichen] Dieser Text ist [rot][dick]rot und dick[/dick][/rot]";

$ersetzen = array(  '[unterstrichen]' => '<span style="text-decoration:underline;">',
					'[/unterstrichen]' => '</span>',
					'[dick]' => '<strong>',
					'[/dick]' => '</strong>',
					'[rot]' => '<span style="color: red;">',
					'[/rot]' => '</span>');

$text_ohne_bb = strtr( $text_mit_bb, $ersetzen );

echo '<p>' .$text_ohne_bb. '</p>';

?>
Ich dachte man benutzt <strong> nicht mehr?!?!

MfG Speider
 
Zuletzt bearbeitet:
Hallo,

seit wann? Quellen?
Man benutzt den b-Tag nicht mehr, aber strong ist, neben em, der einzig korrekte um eine Betonung im Fließtext zu erzeugen.
Ganz richtig ist das nicht, denn strong ist zwar valide, aber es dient dennoch zum Layout. Ich rate von daher .bold {font-weight:bold;} <span class="bold">Text</span> an
 
Werbung:
Ganz richtig ist das nicht, denn strong ist zwar valide, aber es dient dennoch zum Layout. Ich rate von daher .bold {font-weight:bold;} <span class="bold">Text</span> an

Die Font-Weight Variante dient dem Layout, weil es einfach nur Text fett schreibt. Die Tags em und strong stehen dagegen für Emphasized (betont) und Strong Emphasized (stark betont) - vergleiche auch hier und dienen damit also keineswegs dem Layout.
Das hier ein sehr großer Unterschied besteht siehst Du auch daran, dass Google in den Google Webmaster-Tools in den "Guidelines for Webmasters" auf den strong-Tag eingeht. Nicht zuletzt auch deswegen, weil Worte in strong-Tags, ähnliche H1-H6-Tags, einer besonderen Gewichtung als Keywords für die Suchmaschine zukommen.

Sorry Asterixus, ich möchte das nicht totdiskutieren, aber deine Aussage kann man so nicht pauschal stehen lassen, da es stark vom Kontext abhängt, wann man wirklich strong und wann man font-weight:bold; einsetzen sollte.
 
Die Font-Weight Variante dient dem Layout, weil es einfach nur Text fett schreibt. Die Tags em und strong stehen dagegen für Emphasized (betont) und Strong Emphasized (stark betont) - vergleiche auch hier und dienen damit also keineswegs dem Layout.
Das hier ein sehr großer Unterschied besteht siehst Du auch daran, dass Google in den Google Webmaster-Tools in den "Guidelines for Webmasters" auf den strong-Tag eingeht. Nicht zuletzt auch deswegen, weil Worte in strong-Tags, ähnliche H1-H6-Tags, einer besonderen Gewichtung als Keywords für die Suchmaschine zukommen.

Sorry Asterixus, ich möchte das nicht totdiskutieren, aber deine Aussage kann man so nicht pauschal stehen lassen, da es stark vom Kontext abhängt, wann man wirklich strong und wann man font-weight:bold; einsetzen sollte.
Recht hast du, ich wollte nur auf die Tatsache hinaus, dass viele Leute strong als Alternative zu "b" nehmen, zum Beispiel um ein Menü fett erscheinen zu lassen. Oder Dinge, die keine Links sind, aber da wo sie sind nicht im Text sind und fett besser aussehen. Ich bin mit dir einverstanden sage jedoch nur, dass strong zum Layout vergewaltigt wird, nur weil b im Validator rot sieht. ^^

Ich seh' ein, ich habe mich falsch ausgedrückt.
 
Recht hast du, ich wollte nur auf die Tatsache hinaus, dass viele Leute strong als Alternative zu "b" nehmen, zum Beispiel um ein Menü fett erscheinen zu lassen. Oder Dinge, die keine Links sind, aber da wo sie sind nicht im Text sind und fett besser aussehen. Ich bin mit dir einverstanden sage jedoch nur, dass strong zum Layout vergewaltigt wird, nur weil b im Validator rot sieht. ^^

Ich seh' ein, ich habe mich falsch ausgedrückt.

Also meinen wir im Prinzip das Selbe, haben es nur unterschiedlich ausgedrückt. Damit können wir wohl leben, denke ich. :)

Jetzt aber wieder back on Topic, ehe es noch eins von den Mods drüber gibt. ;)
 
Werbung:
Nochmal, bringt das was wenn ein "NOOB" den "Code" so schreibt??
Zu euerer Diskussion:
Ich möchte den Text ja nicht höhergewichten, ich will ihn lediglich dick haben.
Wie ich in dem Code auch geschreiben habe.
Deswegen werde ich CSS benutzen.

MfG Speider

P.S:Hatte keine Zeit den Code auszuprobieren.
mach ich morgen nach der Schule
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben