| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |

10-12-2009, 20:57
|
|
bofan
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: Berlin / Germany
Beiträge: 154
|
|
Str_Replace . Bereiche nicht Beachten.
Hi.
Ich steh mal wider auf dem Schlauch.
Ich habe eine Funktion.
Die Ersetzt mir Automatisch einige Sachen in meinem Content.
Auszug.
Code:
$pfad = aktueller_pfad();
$urlsearch[] = "/([^]_a-z0-9-=\"'\/])((https?|ftp):\/\/|www\.)([^ \r\n\(\)\*\^\$!`\"'\|\[\]\{\};<>]*)/si";
$urlsearch[] = "/^((https?|ftp):\/\/|www\.)([^ \r\n\(\)\*\^\$!`\"'\|\[\]\{\};<>]*)/si";
$urlreplace[]= "\\1\\2\\4";
$urlreplace[]= "\\1\\3";
$text = preg_replace($urlsearch, $urlreplace, $text);
$text = preg_replace("/\[URL\](.*?)\[\/URL\]/si", "<a href=\"\" onclick=\"javascript:window.open('".$pfad."/out.php?url=\\1')\">\\1</a>", $text);
$text = preg_replace("/\[URL=(.*?)\](.*?)\[\/URL\]/si", "<a href=\"\" onclick=\"javascript:window.open('".$pfad."/out.php?url=\\1')\">\\2</a>", $text);
$text = str_replace("href=\"http://","href=\"http://www",$text);
$text = str_replace("href=\"www","href=\"http://www",$text);
$text = preg_replace("/\[B\](.*?)\[\/B\]/si", "<span style='font-weight:bold;'>\\1</span>", $text);
$text = preg_replace("/\[U\](.*?)\[\/U\]/si", "<span style='text-decoration:underline;'>\\1</span>", $text);
$text = preg_replace("/\[I\](.*?)\[\/I\]/si", "<span style='font-style:italic;'>\\1</span>", $text);
$text = preg_replace("/\[wert\](.*?)\[\/wert\]/si", "<span style='font-weight:bolder'>•</span> \\1<br/>", $text);
$text = preg_replace("/\[wert=(.*?)\](.*?)\[\/wert\]/si", "<span style='font-weight:bolder'>\\1</span> \\2<br/>", $text);
$text = preg_replace("/\[color=(.*)\](.*)\[\/color\]/si", "<span style=\"color:\\1;\">\\2</span>", $text);
$text = preg_replace("/\[I_URL=(.*?)\](.*?)\[\/I_URL\]/si", "<a href=\"\\1\">\\2</a>", $text);
naja. Nun will ich dass ich
wenn ich z.B.
[DO_NOT]BEREICH X[/DO_NOT]
eingebe, der BEREICH X nicht Formatiert wird.
Hat da jem. mal einen Tipp.
__________________
Beachte: Dumm ist, wer Dummes tut.
Geändert von bofan (10-12-2009 um 21:00 Uhr)
|

10-12-2009, 21:03
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
du könntest die Sachen die nicht ersetzt werden sollen vorher maskieren. Dafür bietet sich ein Array an, in dem die gespeichert werden. Im Text werden sie dann z. B. durch [0x01][Array-Index][0x02] ersetzt. Nachdem du die eigentliche Ersetzung durchgeführt hast, gehst du das Array mit foreach durch und stellst den Text wieder her. Die Steuerzeichen 0x01 und 0x02 sind dafür günstig, weil sie normalerweise nicht in Texten vorkommen.
Gruß,
Amica
Edit: Noch ein Beispiel obendrauf...
PHP-Code:
<?php
function callback ($a, $b) {
return strlen($b) - strlen($a);
}
$text = "Dokumente in der HyperText Markup Language enthalten viel Text und noch mehr Markup";
$verlinken = array("Markup", "Text", "HyperText Markup Language");
usort($verlinken, "callback");
$cache = array();
foreach ($verlinken as $id => $string) {
$cache[$id] = "<a href=\"#\">" . $string . "</a>";
$text = str_replace($string, "\x01" . $id . "\x02", $text);
}
foreach ($cache as $id => $string) {
$text = str_replace("\x01" . $id . "\x02", $string, $text);
}
echo($text);
?>
HTML-Code:
ohne usort: Dokumente in der Hyper<a href="#">Text</a> <a href="#">Markup</a> Language
enthalten viel <a href="#">Text</a> und noch mehr <a href="#">Markup</a>
mit usort: Dokumente in der <a href="#">HyperText Markup Language</a> enthalten viel
<a href="#">Text</a> und noch mehr <a href="#">Markup</a>
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
Geändert von AmicaNoctis (10-12-2009 um 21:22 Uhr)
|

10-12-2009, 21:29
|
|
bofan
Registrierter Benutzer
|
|
Registriert seit: Aug 2005
Ort: Berlin / Germany
Beiträge: 154
|
|
Achso. Die verlinkung/Ersetung funktioniert.
Ich will ja jetzt. z.B. in einem Text... (Gold wird ersetzt) wahlweise die Ersetzung ausschalten.
Der Goldgräber gräbt in der Goldmine nach Gold.
Dann will ich z.B. haben
Der <a href='#'>Gold</a>gräber gräbt in der Goldmine nach <a href='#'>Gold</a>.
Dafür möchte ich dann eingeben haben.
Der Goldgräber gräbt in der [DO_NOT]Goldmiene[/DO_NOT] nach Gold.
__________________
Beachte: Dumm ist, wer Dummes tut.
|

10-12-2009, 21:30
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.486
|
|
Ich würd' das selbst gebastelte wegwerfen, und das hier nutzen:
BBCode-Parserklasse für PHP
Das ist ein vollständiger Parser, den man umfangreich konfigurieren kann - damit kann man auschliessen, dass invalides HTML herauskommt; was du bei einer rein preg-basierten Umsetzung ganz sicher nicht kannst.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

10-12-2009, 21:33
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Zitat:
Zitat von bofan
Achso. Die verlinkung/Ersetung funktioniert.
Ich will ja jetzt. z.B. in einem Text... (Gold wird ersetzt) wahlweise die Ersetzung ausschalten.
|
... was ja mit dem genannten Prinzip genau so geht. Nur wollte ich dir nicht gleich die komplett fertige Lösung präsentieren, da hast du ja selbst keinen Spaß mehr.
Ansonsten ist wahsagas Einwand natürlich auch berechtigt.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|