Autor Zpráva
capricorn76
Profil *
Dobrý den,

mám např. řetezec

 [t] znak        [/t]
    [t]znak        [t]znak       [t]znak        [/t]

a potřebuji, aby každý znak měl uzavřený tag.
Alphard
Profil
capricorn76:
Můžete uvést, jak má vypadat ukázka uvedená v [#1] na výstupu?
capricorn76
Profil *
[t]znak[/t][t]znak[/t][t]znak[/t][t]znak[/t]
Micruss
Profil
zdravim a co pomocí str_Replace odstranit ty mezery?

$string = " [t] znak        [/t]
    [t]znak        [t]znak       [t]znak        [/t]";
$string = str_replace(' ', '', $string);
echo $string;
Someone
Profil
Micruss:
Odstranění mezer je od věci, capricorn76 se snaží docílit automatického uzavírání značek.
peta
Profil
Obavam se, ze na to lze pouzit jedine parser. Regularnim vyrazem by to slo asi obtizne, treba zdvojene "[bold]...[bold]...[/bold][/bold]". Pripadne pouzit cyklicky regularni vyraz pro pocet vsech otevrenych tagu.
Mozna pomoci preg-replace-callback? http://cz2.php.net/manual/en/function.preg-replace-callback.php .
Mozna domparser? http://www.php.net/manual/en/domdocument.loadhtml.php
Tori
Profil
Pokud by nevadilo, že tam můžou zůstat uzavírací značky navíc (pokud bude "[t]znak[/t] [/t]"), tak by šlo toto:
$str = 'asd [t] znak        [/t]asd [/t] [/t]
    [t]znak        [t]znak       [t]znak   [/t]     [/t] asd';
    
$tmp = explode('[t]', $str);
$str = array_shift($tmp);

foreach ($tmp as $i => $part) {
    $closing = explode('[/t]', preg_replace('~\s{2,}~', '', $part), 2);
    $str .= '[t]'.$closing[0].'[/t]';
    if (isset($closing[1])) { 
        $str .= str_replace('[/t]', '', $closing[1]);
    }
}
var_dump($str);
edit: zapomněla jsem přejmenovat proměnnou, opraveno. Teď to odstraní i přebytečné koncové tagy.
peta
Profil
Jenze ty uvazujes jednoducohu kombinaci. A co kdyz budu mit [bold]+[italic]+text?
han5vk
Profil
peta:
Neviem ako ty, ale ja nevidím, žeby capricorn76 niekde uviedol že mu ide o [bold],[italic] či niečo iné. Spomínal len [t] a [/t], takže nemôžeme vedieť, či potrebuje komplexnejšie riešenie ako to od Tori.
Tori
Profil
Jasně že to není žádné úžasné řešení, jen jsem tím chtěla říct, že jednoduché zadání lze řešit i jednodušším způsobem (než parserem).
Btw na křížení tagů mi Alphard kdysi dobře poradil Texy! http://texy.info/cs/try/jgkpq Vlastní párové značky se tam dají přidat celkem snadno.

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