Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: preg_replace

Aktivity
Avatar
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
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
Odpovídá na Michal Žůrek - misaz
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Odpovídá na Michal Žůrek - misaz
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
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
Odpovídá na Kit
Neaktivní uživatel: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
Neaktivní uživatelský účet
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
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.