Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

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
Avatar
Odpovídá na Daniel Vítek
Michal Žůrek (misaz):

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
Nesnáším {}, proto se jim vyhýbám.
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
Daniel Vítek:

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
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Michal Žůrek (misaz)
Daniel Vítek:

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
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Odpovídá na Daniel Vítek
Daniel Vítek:

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
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

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:

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

 
Nahoru Odpovědět 12.7.2013 12:55
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Vítek
Kit:

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.