Autor | Zpráva | ||
---|---|---|---|
Lukas Art Profil * |
V texttu má tohle [link=http://odkaz.cz]Nadpis[/link] a potřebuju to vyměnit za normální html kod na odkaz.
když je tam jen [link]odkaz[/link] tak to nahradím tímhle: preg_replace("~\[link\](.+)\[\/link\]~U", '<a href=\"$1\">$1</a>', $podpis); . Tohle si ten odkaz uloží do proměnný $1 ale když tam mám dvě ty proměnný tak nevím. |
||
Majkl578 Profil |
#2 · Zasláno: 16. 3. 2010, 09:55:18
$data = ' xxx [link]foo[/link] xxx [link=bar]baz[/link] xxx '; var_dump(preg_replace_callback('~\[link(?:\=(.*))?\](.+)\[\/link\]~U', function ($m) { return '<a href="' . ($m[1] ?: $m[2]) . '">' . $m[2] . '</a>'; }, $data)); |
||
Lukas Art Profil * |
#3 · Zasláno: 16. 3. 2010, 13:21:49
No ale když tohle použiju niják to neupravuju tak mi to vyhodí:
Parse error: syntax error, unexpected T_FUNCTION in /home/httpd/helpet.info/www/d.php on line 9 a já tam tu chybu nevidím. |
||
Majkl578 Profil |
#4 · Zasláno: 16. 3. 2010, 13:27:19 · Upravil/a: Majkl578
Lukas Art:
Asi máš staré PHP (<5.3), které nepodporuje anonymní funkce. var_dump(preg_replace_callback('~\[link(?:\=(.*))?\](.+)\[\/link\]~U', create_function('$m', 'return \'<a href="\' . ($m[1] ? $m[1] : $m[2]) . \'">\' . $m[2] . \'</a>\';' ), $data)); |
||
mattyZEM Profil |
#5 · Zasláno: 16. 3. 2010, 13:56:48
<?php $text="[link=http://example.com]hoj[/link]"; $text=preg_replace('@\[url=http://([^\]]+)\](.+?)\[/url\]@i', '<a href="http://$1" title="$1">$2</a>', $text); echo $text; ?> mělo by to fungovat... |
||
Lukas Art Profil * |
#6 · Zasláno: 16. 3. 2010, 14:31:07
A ještě když požiju thle funkci:
$kall = var_dump(preg_replace_callback('~\[link(?:\=(.*))?\](.+)\[\/link\]~U', create_function('$m', 'return \'<a href="\' . ($m[1] ? $m[1] : $m[2]) . \'">\' . $m[2] . \'</a>\';' ), $data)); echo $kall; Tak mi to za prví dá celej text do uvozovek (") a za druhý to před to napíše: string(63) |
||
Majkl578 Profil |
#7 · Zasláno: 16. 3. 2010, 15:05:44 · Upravil/a: Majkl578
Lukas Art:
Stačí odstranit funkci var_dump, která vypisuje obsah proměnné. |
||
Lukas Art Profil * |
#8 · Zasláno: 16. 3. 2010, 21:00:48
Jo děkuju moc a ještě jeden takovej dotázek. Jak to mám přepsat aby to z html kodu <a href="neco">neco</a> udělalo zase [link=neco]neco[/link]?
|
||
Lukas Art Profil * |
#9 · Zasláno: 17. 3. 2010, 09:26:45
Zkoušel jsem to takhle:
$podpis3 = preg_replace_callback('~\<img src="(?:\=(.*))?\alt="\'(.+)\">~U', create_function('$m', 'return \'[img="\' . ($m[1]) . \'"] \' . $m[2] . \'[/img]\';' ), $podpis2); ale nefunguje to, nejspíš chyba v "\" |
||
AM_ Profil |
#10 · Zasláno: 17. 3. 2010, 14:48:54
Callback je tady trochu dělo na komára, tohle se dá napsat jednoduchým regulárem. Předpokládám, že takto v opačném pořadí to chceš, když chceš editovat existující text. Já to vždycky řeším takto:
- server s malou zátěží: ukládat pouze v původním formátu [img], do HTML převádět přímo za běhu (není to moc náročné, pokud nemáš desetitisíce přístupů denně nebo ty texty nejsou na stovky stránek, můžeš si to dovolit) - server s velkou zátěží: ukládat oba formáty, v případě potřeby editace edituješ "zdroják", při uložení uložíš "zdroják" i výsledné HTML. Popř. použít nějakou cache, třeba Nette framework ti k cachování rovnou poskytne nástroje. Jednak je to jednodušší, jednak se vyhneš problémům (např. jednoho dne přidáš nový tag a zapomeneš přidat funkci pro zpětný převod, nebo - jak známo, v každém programu je alespoň jedna chyba - pokud algoritmy nejsou zcela přesně napsané aby libovolný text převedly správně oběma směry, sem tam se objeví podivné anomálie a blbě se budou opravovat). |
||
mattyZEM Profil |
#11 · Zasláno: 17. 3. 2010, 15:33:02
Jej promiň, spletl jsem se:
<?php $text="[link=http://example.com]hoj[/link]"; $text=preg_replace('@\[link=http://([^\]]+)\](.+?)\[/link\]@i', '<a href="http://$1" title="$1">$2</a>', $text); echo $text; ?> |
||
Časová prodleva: 14 let
|
0