PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funktion/Klasse zum Umsetzen von BB/Pseudocode


HS-78
03.07.2002, 09:30:01
Hi,

in diversen Forums gibt es doch immer diesen Code in eckigen Klammern für Schriftformatierung, Bilder, URLs usw. Gibt es da irgendwo eine Funktion/Klasse zum Download der man einen String übergeben kann in den solceh Code enthalten ist und die mir dann den aufgelösten HTML String zurückgibt?

Danke schonmal, HS.

|Coding
05.07.2002, 21:04:33
hi,

schreib dir doch selber den code.

bsp.:

<?
$str = '[ b]dieser text ist bold.[/ b]';
$str = eregi_replace("[ b](.*)[/ b]", "<b>1</b>", $str);
echo $str.'<br>';
$str = 'dieser text ist italic.[ /i]';
$str = eregi_replace("[ i](.*)[/ i]", "<i>1</i>", $str);
echo $str;
?>

ausgabe:

dieser text ist bold.
[i]dieser text ist italic.


beachte das vor dem b und dem i immer ein leerzeichen ist was normalerweise nicht dort hingehört, ich musste es jetzt nur so schreiben, weil auch das forum hier diese zeichenkombination kennt.

c4
05.07.2002, 21:14:17
Ein einfaches str_reaplace("[*b]","<b>",$string); und str_reaplace("[*/b]","</b>",$string); machen es doch auch.

Progman
05.07.2002, 23:16:31
die Frage ist nur wie der Browser nur ein offenes <b> Tag erkennt, wenn man _nur_ "text[b]bla" schreibt. Dann wird das zeichen ersetzt doch es wird garnicht geschlossen.

desweiteren sollte man die preg_replace verwenden, weil sie ca. 200mal schneller sind.

|Coding
05.07.2002, 23:28:15
@ Progman,

$str = eregi_replace("[ i](.*)[/ i]", "<i>1</i>", $str);

wie würde das den jetzt mit preg_replace() aussehen?
genau so oder muss man was ändern?

Progman
05.07.2002, 23:38:57
$text=preg_replace('/(.*)/Ums','<i>1</i>',$text);

so _sollte_ es gehen, einfach mal testen

|Coding
05.07.2002, 23:44:13
danke Progman.

ich werde mir aber morgen mal die preg funktionen ansehen.

HS-78
08.07.2002, 09:53:33
Ist zwar nicht ganz das was ich gesucht habe, aber trotzdem danke. Dann werde ich die Woche mir mal so eine Funktion basteln.

CU, HS.

megge
08.07.2002, 13:21:30
fucntion code($string) {
$string = str_replace('', '<b>', $string);
$string = str_replace('', '</b>', $string); }

Progman
08.07.2002, 13:27:10
http://xhawk.net/projects/other/ubb.inc.phps

Nev
08.07.2002, 13:27:47
Hi @ll

eregi_replace ist schneller als str_replace
deswegen verwendet man es.

bzw kann man mit REGULÄREN AUSDRÜCKEN arbeiten, was nochmal einen geschwindigkeits gewinn bringt

Progman
08.07.2002, 14:27:29
_wegen_ den Regulären audrücken kann es garnicht schneller sein als str_replace.
siehe die Kommentare auf http://de.php.net/str_replace

Matt
08.07.2002, 14:37:24
natürlich können sie schneller sein, wenn sie vernünftig eingesetzt werden, kann (unter umständen) der gesamte UBB Code in einer Zeile abgehandelt werden, der REGEX dafür wäre allerdings ziemlich gewaltig, es wäre aber trotzdem schneller, als den string 20 mal so zu durchsuchen.

markus.thiede
08.07.2002, 15:17:09
... wurde weiter oben schon Angesprochen es ist nicht sichergestellt das ein geöffneter tag auch geschlossen wird.
[b]was eregi_replace abfangen würde.

Progman
08.07.2002, 15:35:19
Mit preg_replace zu arbeiten ist eleganter als mit str_replace das stimmt schon und einfacher als 20 str_replace zu schreiben. Aber ich bezog mich auf die Ausage, dass eregi_replace schneller als str_replace sei, was nicht stimmt. Siehe folgendes script

function uhrzeit()
{
list($low, $high) = split(" ", microtime());
$t = $high + $low;
return $t;
}

$t=uhrzeit();
$max=1000;
for($i=0;$i<$max;$i++)
{
str_replace("a ","A ",$text);
}
$t2=uhrzeit();
for($i=0;$i<$max;$i++)
{
ereg_replace("a ","A ",$text);
}
$t3=uhrzeit();
for($i=0;$i<$max;$i++)
{
preg_replace("/a /","A ",$text);
}
$t4=uhrzeit();
echo("<pre>
");
echo("str_replace dauerte : ".($t2-$t)."
");
echo("ereg_replace dauerte : ".($t3-$t2)."
");
echo("preg_replace dauerte : ".($t4-$t3)."
");
echo("</pre>
");

Da bleibt ereg_replace ganz schon auf der Strecke liegen. Anhand dieses script sieht man auch das pcre _viel_ schneller als posix ist. Deswegen sollte man immer preg_replace usw. statt ereg_replace verwenden.

|Coding
08.07.2002, 17:53:29
@ Progman,

warum verwendest du die "(" bzw. ")" bei dem echo ?
das ist doch nicht von nöten.

Progman
09.07.2002, 00:29:59
Benutzt ich immer ;) Hab ich mir so angewöhnt.

Und kommt jetzt nicht mit "das spart Festplattenplatz". Wenn ihr eure PHP-Skripte auf 8-Zoll Disketten speichert ist das eure schuld *g*

HS-78
09.07.2002, 09:07:16
Danke Progman :-)

HS-78
09.07.2002, 11:34:51
Eine Frage dazu hätte ich noch. Ich möchte die Funktion noch um ein Tag ergänzen, mit welchem der Nutzer Styles aus dem CSS nutzen kann. Das soll dann so aussehen:

[ css=blue]Blauer Text[/css]

Dazu wollte ich dies als Grundlage nehmen:

$string = preg_replace("/(S+?)/si","<a href="http://1" target="_blank">2</a>", $string);

und zu dem hier umwandeln:

$string = preg_replace("/(S+?)/si","<div class="1">2</div>", $string);

Nu klappt das aber nicht :( In meinem String steht immernoch das obige Tag und nicht das was da eigentlich stehen soll. Warum nur??

Matt
09.07.2002, 11:45:24
argh!!
ich kann keine pcre
kann mir mal jemand ganz schnell einen link zu ner referenz postne? danke!

HS-78
09.07.2002, 11:53:20
Nee, kann ich auch nicht und gebe ich ehrlich zu. Und über einen Link zu einer !!leicht!! verständlichen Einführung wäre ich auch sehr dankbar.

Wie auch immer, ich habe es jetzt so gemacht:

$string = preg_replace("/(.*?)/si","<span class="1">2</span>", $string);

Und das scheint soweit zu klappen.

Progman
09.07.2002, 14:23:41
> $string = preg_replace("/(S+?)/si","<div class="1">2</div>", $string);

Das geht deshalb nicht weil S für alle Zeichen steht, außer Spaces wie
leerzeichen und
.
evrverv wäre umgewandelt
everv erv erv erv er hingegen nicht, da ja da Leerzeichen drin sind.

ist etwas kompliziert ich weiß ;)
Aber wenn man es kann ist es cool *g*
http://de.php.net/pcre


$string = preg_replace('#(.+)#Uis','<div class='1'>2</div>', $string);


So sollte es auch gehen.

theripper8472
11.07.2002, 01:34:33
in selfphp gibts ne menge über ereg_? aber nichts über preg_?

was mich interessiert, sind diese suchparameter wie U m und s und wie sie alle heißen.
ich brauch generell noch viel wissen über regex, weil ich nur windows habe.
schade dass windows keine regex hat. die sind sooo mächtig.

Matt
11.07.2002, 11:11:43
sooooo mächtig sind sie auch wieder nicht, nur wenn man sich nicht wirklich mit ihnen auskennt, können sie in einem betriebssystem ganz schön gefährlich sein. Auch microsoft hat regexe, allerdings in SEHR entschärfter form von Wildcards, prinzipiell wäre das hier schon ein regex: del index??.php (wobei das Fragezeichen für ein beliebiges zeichen steht.

Progman
11.07.2002, 12:29:21
Das ist ein wildcart (oder so) aber kein regex ;)

Infos zu preg_xxx
http://de.php.net/pcre
http://www.perl.com -> Doku

Matt
11.07.2002, 13:38:44
ein wildcard ist auch schon ein regulärer ausdruck ansich ist index??.php das selbe wie index[]{2}.php nur eine andere umschreibung.