html to ubb Prob

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/html_to_ubb_prob_146573/page_1 - zur Vollversion wechseln!


Maehmann schrieb am 27.07.2005 um 19:16

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


ica schrieb am 27.07.2005 um 20:07

darf ich fragen wieso du aus html code wieder ubb code machen willst?


Maehmann schrieb am 27.07.2005 um 20:15

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 schrieb am 27.07.2005 um 21:20

und wieso schreibst du nicht gleich den ubb code in die db und wandelst es vorm ausgeben in html um?


Maehmann schrieb am 27.07.2005 um 21:33

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 schrieb am 28.07.2005 um 00:12

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 schrieb am 28.07.2005 um 07:49

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:


Maehmann schrieb am 28.07.2005 um 12:41

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


watchout schrieb am 28.07.2005 um 13:25

Darf ich anmerken dass deine Regexp's nicht vollständig sind? :)


Maehmann schrieb am 28.07.2005 um 15:54

wie meinst du das?


watchout schrieb am 28.07.2005 um 16:30

<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 schrieb am 28.07.2005 um 16:49

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 schrieb am 28.07.2005 um 18:52

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 schrieb am 28.07.2005 um 19:53

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.




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025