Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET
Využij akce až 80% zdarma při nákupu e-learningu. Více informací .
C# week
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:12.7.2013 11:51

Zdravím, potřeboval bych trošku pomoct.
Mám třeba

<code>nějakej zdroják</code>

jak to nahradit tímto

<code><?php echo(htmlspecialhars('nějakej zdroják')); ?></code>

Vím, že se to dělá přes preg_replace, ale nevím jak...
Díky, Dan

Editováno 12.7.2013 11:53
Odpovědět
12.7.2013 11:51
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Odpovídá na Daniel Vítek
Michal Žůrek - misaz:12.7.2013 12:01

Nějak přesně nevím o co ti jde, ale pokud to potřebuješ převést na entity, tak k tomu se používá funkce htmlentities.

v manuálu ( http://php.net/…entities.php ) je na to celkem pěkný example.

 
Nahoru Odpovědět
12.7.2013 12:01
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek - misaz
Daniel Vítek:12.7.2013 12:03

jj to je celkem jedno co na to použiji, ale já to tam potřebuji nějak doplnit :D

Nahoru Odpovědět
12.7.2013 12:03
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek - misaz
Daniel Vítek:12.7.2013 12:36

Nebo ještě jinak - chci udělat něco jak je tady na devbooku - [ code ] a [/ code ]. Na netu jsem si našel (a upravil)

$search = "/\[code\](.*?)\[\/code\]/is";
$replace = "<code>$1</code>";
$source = "Lorem ipsum
<strong>Ahoj</strong>

lorem ipsum";

$result = preg_replace ($search, $replace, $source);
echo($result);

\---

Jak mám escapovat to $1 ?

Nahoru Odpovědět
12.7.2013 12:36
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:12.7.2013 12:46

Menší překlep :D

$search = "/\[code\](.*?)\[\/code\]/is";
$replace = "<code>$1</code>";
$source = "Lorem ipsum [code ]<strong>Ahoj</strong>[/ code] lorem ipsum";

$result = preg_replace ($search, $replace, $source);
echo($result);
Nahoru Odpovědět
12.7.2013 12:46
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:12.7.2013 12:48

Asi bych si ten string nejprve rozebral na tokeny a ty teprve zpracoval automatem

<?php
$str="Text na začátku<code>nějakej zdroják</code>Text uprostřed<code>
druhý zdroják</code>Text na konci";
$arr=preg_split('/(<code>|<\/code>)/', $str, null,  PREG_SPLIT_DELIM_CAPTURE);
print_r($arr);
Nahoru Odpovědět
12.7.2013 12:48
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Kit
Daniel Vítek:12.7.2013 12:55

Mohl by jsi mi to prosím napsat celé, tomuto vůbec nerozumím :D

Nahoru Odpovědět
12.7.2013 12:55
Na síti působím už pěknou řádku let. Pokud budeš něco potřebovat, písni mi, pokusím se ti poradit :)
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:12.7.2013 13:43

Pokud sis to spustil, tak jsi dostal něco takového:

Array
(
    [0] => Text na začátku
    [1] => <code>
    [2] => nějakej zdroják
    [3] => </code>
    [4] => Text uprostřed
    [5] => <code>
    [6] => druhý zdroják
    [7] => </code>
    [8] => Text na konci
)

Teď už jen ten seznam projít a vygenerovat výstup:

$out=array();
$stav=0;
foreach ($arr as $token) {
    switch ($stav) {
    case 0:
        if ($token=='<code>') {
            $stav=1;
        }
        $out[]=$token;
        break;

    case 1:
        if ($token=='</code>') {
            $stav=0;
            $out[]=$token;
        } else {
            $out[]=htmlspecialchars($token);
        }
        break;
}
print_r($out);
echo implode('', $out);

V téhle podobě to sice nezvládne vnořené <code>, ale zvládne to víc úseků za sebou. Na vnořené elementy bys musel použít rekurzi nebo zásobník.

Nahoru Odpovědět
12.7.2013 13:43
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.