Diskuze: preg_replace
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
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.
jj to je celkem jedno co na to použiji, ale já to tam potřebuji nějak
doplnit
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 ?
Menší překlep
$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);
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);
Mohl by jsi mi to prosím napsat celé, tomuto vůbec nerozumím
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.
Zobrazeno 8 zpráv z 8.