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
$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 *
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
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
<?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 *
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
Lukas Art:
Stačí odstranit funkci var_dump, která vypisuje obsah proměnné.
Lukas Art
Profil *
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 *
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
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
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;
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0