Transformace BBkódu na HTML kód – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Transformace BBkódu na HTML kód – PHP – Fórum – Programujte.comTransformace BBkódu na HTML kód – PHP – Fórum – Programujte.com

 

tom*p0
Stálý člen
11. 11. 2007   #1
-
0
-

Programuji funkci, která transformuje BBkód na HTML kód.

Mám ale velký problém s tagem

[url=adresa]text[/url]

Ten se má přeměnit na:
<a href="adresa">text</a>


Uvnitř by místo textu měly být někdy jiné tagy, např.

[url=adresa2]text2</a>

Ale správně by to mělo být:

<a href="adresa">text</a>

<a href="adresa2">text2</a>

Je to možné pomocí PHP nějak vyřešit?

Vím o řešení pomocí str_replace, ve kterém se nahradí [url= řetězcem <a href="
a ] řetězcem "> , ale tohle použít nemůžu, protože chci později používat i tag:
[img=adresa]popisek" />


V HTML:
<img src="adresa" alt="popisek" />

A tak by mi změna řetězce ] za "> znemožnila vložení parametru alt, protože by se uzavřel tag img.

V příloze je soubor, který obsahuje funkci... přiložil jsem ji zvlášť v souboru txt, protože tady na fóru se kód v PHP zobrazuje divně - např. přidává automaticky zpětné lomítko před uvozovky, přidává automaticky zpětné lomítko před zpětné lomítko... a protože používám regulární výrazy, byl by z toho až příliš velký zmatek.

EDIT: Tak tento bug s přidáváním zpětného lomítka se vyskytuje jen u náhledu... v samotném příspěvku je to už správně.

Díky za odpovědi.

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
12. 11. 2007   #2
-
0
-
Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
12. 11. 2007   #3
-
0
-

Díky, s Perl-compatible regulárními výrazi se toho dá udělat celkem dost. Až budu mít kompletní funkci, dám to sem - třeba se to někomu bude hodit...

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
12. 11. 2007   #4
-
0
-

To tom*p : ajo, promin, me nenapadlo ze nepouzivas preg_*

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
12. 11. 2007   #5
-
0
-

jasně, všiml jsem si toho a tak jsem preg_* začal používat

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
tom*p0
Stálý člen
12. 11. 2007   #6
-
0
-

Ještě mám jeden dotaz s tímto související:

Proč tohle:

echo preg_replace("|\[x\](.+)\[/x\]|i","<x>\\1</x>","[x]\n\nTEXT\n\n[/x]");


vypíše:
[x]


TEXT

[/x]


a nezmění tagy [x] na <x>?

Přitom:
echo preg_replace("|\[x\](.+)\[/x\]|i","<x>\\1</x>","[x]TEXT[/x]");


vypíše:
<x>TEXT</x>


Vypadá to, jako by znak . nezastupoval i nový řádek, jak to lze upravit, aby to fungovalo?

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
12. 11. 2007   #7
-
0
-

To tom*p : ten stejný odkaz, uplně na začátku, modifikátor \s

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
15. 11. 2007   #8
-
0
-

Díky, velká část funkce mi už funguje.

Měl bych ještě jeden dotaz. Chtěl bych použít transformaci BBkódu všude, jen ne uvnitř tagů [html] [/html]. Jak toho docílit?

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
15. 11. 2007   #9
-
0
-

To tom*p : no na co tu funci zavolas, to prevede, nechapu dotaz.. ;)

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
15. 11. 2007   #10
-
0
-

Zavolám ji na text:
bla bla bla
bla bla bla
[html]
html kód
[/html]
bla bla bla
bla bla bla

a chci aby si něj vytáhla a s tím potom dále pracovala:
bla bla bla
bla bla bla
bla bla bla
bla bla bla

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
16. 11. 2007   #11
-
0
-

muzes mi rict, o ktere tve konkretni funkci mluvis??? :D ja vubec nemam predstavu v cem potrebujes aktualne pomoci.. ;)

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
16. 11. 2007   #12
-
0
-

Ok, zkusím to vysvětlit podrobněji. Mám funkci bbcode_do_html s parametrem $text. Vložím do ní nějaký text (např. článek) a funkce transformuje bbcode tagy v textu pomocí volání funkce preg_replace do jejich HTML ekvivalentů. Součástí transformace je i změna < a > na < a >, která zabezpečí, aby se používaly pouze BBcode tagy (pro bezpečnost - např. u komentářů) a HTML tagy byly transformovány na obyčejný text. Rád bych ale měl možnost vložit i HTML kód do textu pomocí uzavření tagu do [html] [/html]. Vnitřek tohoto tagu funkce bude ignorovat (nezmění < > na entity a také nechá uvnitř BBkód bez transformace).

Příklad vstupu:

[h2]Nadpis článku[/h2]

[center]Tento text používá [i]BBCode[/i] formátování. Běžný kód <i>HTML</i> bude změněn na textové entity a nebude tady funkční.[/center]
[html]
Pokud je text uzavřen ve speciálním tagu, nic se s ním neděje. Můžu tady vklidu používat <i>HTML</i> tagy a nezmění se na entity (zůstanou funkční), tady je zbytečné používat [i]BBCode[/i] tagy, protože nebudou funkční a zůstanou jako text.
[/html]


Výstup:
<h2>Nadpis článku</h2>

<p align="center">Tento text používá <i>BBCode</i> formátování. Běžný kód <i>HTML</i> bude změněn na textové entity a nebude tady funkční.</p>
Pokud je text uzavřen ve speciálním tagu, nic se s ním neděje. Můžu tady vklidu používat <i>HTML</i> tagy a nezmění se na entity (zůstanou funkční), tady je zbytečné používat [i]BBCode[/i] tagy, protože nebudou funkční a zůstanou jako text.


Funkce je v příloze, jsou v ní tagy, které by mohli ovlivnit formátování tohoto příspěvku.

Momentálně mám funkci hotovou, ale nedaří se mi ji upravit tak, aby při preg_replace nahrazování ignorovala vnitřek tagu [html][/html]. Prostě ji zavolám na celý text a chci, aby vnitřek těchto tagů ignorovala. Jde to nějak udělat?

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
16. 11. 2007   #13
-
0
-

To tom*p : aje... no, dekuji za vysvetleni.

transformaci <> budes muset prepsat taky do regularniho vyrazu, a ty nasledne jeste slozite upravit, ale to jsem jeste nikdy nedelal, a nemam je tolik nastudovane. mrkni na interval.cz, kde je peknej serial, a zkus vyhledat jak napsat podminku, aby se ti to nahrazovalo, tam, kde chce respektiove nechces..

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
16. 11. 2007   #14
-
0
-
Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
16. 11. 2007   #15
-
0
-

To tom*p : jj, to je velmi mocna funkce...akorat ze by to chtelo jeji inverzni funkci, tedy aby volala funkcu na to, co neodpovida.. ;)

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
17. 11. 2007   #16
-
0
-

Napadlo mě další možné řešení. Před samotným nahrazováním uložím všechen obsah [html] tagů do pole A pomocí preg_grep.
Po transformaci bbcode tagů to zopakuji a uložím to do pole B. Potom udělám preg_replace, který mi nahradí B za A.

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
17. 11. 2007   #17
-
0
-

To tom*p : určitě je to řešení :) ale otázka je, co je efektivnější a jestli by stálo vymýšlet zato ty regularní výrazy, ale v těch tolik neporadím, takže to určitě zkus takhle.. ;)

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
19. 11. 2007   #18
-
0
-

Díky za pomoc.
Tady je editor, který jsem díky tomu udělal použitý v praxi:
http://programy.wz.cz/kniha/

Je to jenom "lite" verze pro veřejnost, v plné je něco přes dvojnásobek funkcí a i možnost vložení funkčního HTML kódu, což by mělo být dostupné pouze pro administrátory.

Až bude všechno hotové a chyby vychytané, možná uveřejním zdrojové kódy.
Zatím by to mělo být funkční v Opeře 9, Firefoxu 2 a Internet Exploreru 7.

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
hrach
~ Redaktor
+1
Boss
19. 11. 2007   #19
-
0
-

jeste by to trosku chtelo vychytat treba kdyz chcu napsat tucnej dolni index... ;)

Nahlásit jako SPAM
IP: 193.179.169.–
http://jan.skrasek.com@hrachcz – webdeveloper
tom*p0
Stálý člen
20. 11. 2007   #20
-
0
-

Díky za upozornění, teď už by to mělo fungovat.

Nahlásit jako SPAM
IP: 217.115.246.–
Don't waste your time, or time will waste you.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 18 hostů

Podobná vlákna

OpenGL - transformace — založil Liliputan

Transformace - animace — založil suxman

Laplaceova transformace — založil Yety

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý