richtig replacen

Kurt Cobain

Erfahrenes Mitglied
tag tag

hab da ne variable:

PHP:
$b = "[ b ]fett[ /b ]";

jetzt will ich , dass der text nacher fett rauskommt. so:

PHP:
 $fett1 = str_replace ("[ b ]", "<b>", $b);
 $fett2 = str_replace ("[ b ]", "<b>", $fett1);

bis da klappt ja alles, wenn jetzt aber einer nur [ b ] schreibt und das [ /b ] versisst wird nur das erste replaced.

ich hab irgendwo schonmal ein script gesehen, dass die tags nur replaced, wenn sie auch wieder zugemacht wurden, hat aber zimlich kompliziert ausgesehen,

kann mir das einer erklären?
wie man dass dan replacen muss?

danke
 
Um nur Passagen zu verarbeiten, in denen sowohl der öffnende als auch der schließende Tag vorkommt, ist das Arbeiten mit regulären Ausdrücken am besten. Denn mit regulären Ausdrücken können Muster definiert werden, in denen beide Tags vorkommen, beispielsweise: \[b\](.*)\[/b\].
PHP besitzt nun einige Funktionen, die mit regulären Ausdrücken arbeiten. Darunter auch eine Funktion zum Ersetzen von Passagen, die auf bestimmte Muster passen.
 
PHP:
<?
  function format($str){
	$str = preg_replace("%\[ b ](.*?)\[ /b ]%","<b>$1</b>",$str);
	$str = preg_replace("%\[ i ](.*?)\[ /i ]%","<i>$1</i>",$str);
	$str = preg_replace("%\[ u ](.*?)\[ /u ]%","<u>$1</u>",$str);
	return $str;
  }
  $str = "Dieser Test ist [ b ]fett[ /b ], dieser Text ist [ i ]kursiv[ /i ] und dieser Text ist [ u ]unterstrichen[ /u ]";
  echo format($str);
?>
 
replaced alle auf einmal ([i],[u] und [b]):

PHP:
 $text = "[i]italic[ /i] und  [u] unterstrichen[ /u] und [b]bold[ /b]";
 $pattern = "!\[(i|u|b)\](.+?)\[/\\1\]!is";
 echo preg_replace($pattern, "<$1>$2</$1>", $text);
 
tag

klappt alles wunderbar,

hab nur noch ein problem.

wenn ich ja ner url hab und se replace sieht das ja so aus( www.web.de ):
PHP:
 $str = preg_replace("%\[ url](.*?)\[ /url]%","<a href=\"$1\">$1</a>",$str);
(klappt)

was aber wenn ich sowas hab:
linktext

wie replaced man sowas
 
also wenn du das mit schon hinbekommn hast, dann dürfe das andere ja eigentloich auch nicht so schwer sein.

ich versuche es einfach mal, ist aber ungetestet :):

PHP:
 $str = preg_replace("@\[url=(.*?)\](.*?)\[/url\]@uism", "<a href=\"".$1."\" target=\"_blank\">".$2."</a>"; $str);
 
Zurück