"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

html to ubb Prob

Maehmann 27.07.2005 - 19:16 787 13
Posts

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
Hallo Leute,

ich verwende folgendes um aus html code wieder ubb code zu machen:
Code: PHP
$str = eregi_replace("\<b\>", '[b]', $str); 
$str = eregi_replace("\</b\>", '[/b]', $str); 
$str = eregi_replace("\<i\>", '[i]', $str); 
$str = eregi_replace("\</i\>", '[/i]', $str); 
$str = eregi_replace("\<u\>", '[u]', $str); 
$str = eregi_replace("\</u\>", '[/u]', $str); 
$str = eregi_replace("\\<a href=\"([^\\[\"]*)\"\\ target=\"_blank\">([^<\[]*)</a>","[url=\\1]\\2[/url]", $str);
$str = eregi_replace("\\<a href=\"mailto:([^\\[]*)\"\\>([^<\[]*)</a>","[email=\\1]\\2[/email]",$str);
$str = eregi_replace("\\<img src=\"([^\\[]*)\"\\ border=0>([^<\[]*)","[img]\\1[/img]",$str);
$str = eregi_replace("\<br />", '', $str);

Das funktioniert bei mir daheim auch tadellos. Dann hab ich heute das Ganze auf dem Webspace getestet und der macht nur Blödsinn draus.

Zum Beispiel:
<b> ---> <[b]> statt [b]
</b> ---> </[b]>
<a href="mailto:jane.doe@unkown.com">Jane Doe</a> ändert er garnicht.
<br /> ---> <
usw.

Ich hab leider keine ahnung woran das liegt? Hatte schon einmal jemand so ein Problem? Oder noch besser, weiß jemand wie man das Problem umgeht?

Btw.: Es ist absicht, dass nur ein Teil des Ubb Codes unterstützt wird.

*tia*

Christoph
Bearbeitet von Maehmann am 30.07.2005, 15:28

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
darf ich fragen wieso du aus html code wieder ubb code machen willst?

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
Zitat von iCA-
darf ich fragen wieso du aus html code wieder ubb code machen willst?

Ja :)
Nachdem das formular abgeschickt wurde, wird der inhalt in html umgewandelt und ausgeben und anschließend in die db gschrieben.
Wenn ich den eintrag jetzt editieren will, muss der html code für den benutzer wieder in ubb umgewandelt werden.

wie gesagt, daheim hat alles funktioniert ... ich verstehe nicht wo das problem ist.

ica

hmm
Avatar
Registered: Jul 2002
Location: Graz
Posts: 9818
und wieso schreibst du nicht gleich den ubb code in die db und wandelst es vorm ausgeben in html um?

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
das ist natürlich auch möglich ... ich habs aber anders gemacht. so muss ich viel seltener das umwandeln machen ...

aber wenn ich das mit dem dekodieren nicht hinbekomm, dann muss ichs eh so machen ...

Ich habs daheim getestet geht, auf meinem webspace gehts auch.

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
verwend besser die preg_* Functions, sind schneller, können mehr und... ja preg kann ich dir helfen - eregi is mir suspekt :D

bzw. bei solchen
$str = eregi_replace("<b>", '[b]', $str);
Zeilen verwendest besser str_replace - weil das is überhaupt noch viel schneller.

edit: ich dachte am webspace gehts nicht?

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
Sorry, das war vielleicht missverständlich ... auf meinem webspace gehts, auf dem wos laufen soll, gehts nicht :(

PHP Version daheim: 5.0
Mein Space: PHP Version 4.3.11
Der blöde Space: Hardened-PHP Version 4.3.10/0.2.6

Ich werd mir das mal anschauen mit den anderen Funktionen.

Edit:
Offensichtlich liegt es an unterschiedlichen Regex Systemen.
Alle Server auf denen das Ganze funktioniert haben "--enable-mbregex"
Wos nicht geht hat "--with-regex=system"
als Configure Command.

Sehr ärgerlich :bash:
Bearbeitet von Maehmann am 28.07.2005, 11:38

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
Sodala ... nach langem rumspielen geht das jetzt auch endlich.
Das Problem lag im Escapen von \ und < Zeichen

Code: PHP
function decodeUbb($str) {
    $str = eregi_replace("<a href=\"([^\\[\"]*)\"\ target=\"_blank\">([^<\[]*)</a>","[url=\\1]\\2[/url]", $str);
    $str = eregi_replace("<a href=\"mailto:([^\\[]*)\">([^<\[]*)</a>","[email=\\1]\\2[/email]",$str);
    return $str;
}

Das funktioniert überall.

Christoph

Edit: Irgendwie verhunzt der PHP Tag die UBB Sachen ... hab den teil rausgenommen
Bearbeitet von watchout am 28.07.2005, 13:25

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Darf ich anmerken dass deine Regexp's nicht vollständig sind? :)

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
wie meinst du das?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
<a href='...'>[Click Here]</a>
wird nicht gematched so wie ich das sehe, was aber eigentlich valid ist.

ausserdem erlaubt es keine "[" im Link - wobei das ja ein Grenzbereich ist, weil die auch in URLs nicht vorkommen dürften - aber dann dürften auch keine "]" erlaubt sein...

weiters matched <a href="">aasd <b>abasda</b></a> nicht, ist aber valid.

besser lesbar:
Code: PHP
function decodeUbb($str) {
    $str = eregi_replace(
        "<a href=\"([^\\[\"]*)\"\ target=\"_blank\">([^<\[]*)</a>",
        "[u"."rl=\\1]\\2[/url]", $str);
    $str = eregi_replace(
        "<a href=\"mailto:([^\\[]*)\">([^<\[]*)</a>",
        "[e"."mail=\\1]\\2[/email]",$str);
    return $str;
}

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
Also das ersetzen von <b></b> innerhalb des des Links erledigt eine str_replace ...
Aber das mit den [] ist leider richtig =/
da muss ich noch mal drüber gehen. Leider bin ich nicht der regex guru. :(
aber das wird schon

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Maehmann
Also das ersetzen von <b></b> innerhalb des des Links erledigt eine str_replace ...
Was übrigens eigentlich auch schlecht is', denn du ersetzt blind <b> durch [b] und zurück - wenn jetzt jemand ein einzelnes [b] postet, ist der gesamte Text danach Fett, was natürlich unangenehm ist.

Maehmann

OC Addicted
Avatar
Registered: Aug 2002
Location: Vienna
Posts: 1110
Zitat von watchout
Was übrigens eigentlich auch schlecht is', denn du ersetzt blind <b> durch [b] und zurück - wenn jetzt jemand ein einzelnes [b] postet, ist der gesamte Text danach Fett, was natürlich unangenehm ist.

nope ... mit einem einfach str_replace mach ich nur <b> zu [ b ]
[ b ] zu <b> macht er über eine regex bei der sowohl ein [ b ] als auch ein [ / b ] sein müssen ... wenn das nicht der fall ist bleibt [ b ] einfach stehen.
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz