Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: Regex - text (ne)obsahující nové řádky

PHP PHP Regex - text (ne)obsahující nové řádky American English version English version

Aktivity (1)
Avatar
IT Man
Redaktor
Avatar
IT Man:27.6.2015 17:58

Zdravím zdejší komunitu,
zrovna řeším takovou blbůstku a nedokážu se s ní hnout. Pomůžete mi, prosím?

Mám nějaký text od uživatele. A v něm potřebuji nahradit <script>cokoliv od uživatele</script> za nějaký text. Jenže jsem se sekl v tom, aby to fungovalo. Samozřejmě se jedná o zamezení útoku a napadly mě tři varianty.

Varianta 1.:
<script>kód</script>

Varianta 2.:
<script>kód

Varianta 3.:
<script>

kód

</script>

Těch variant může být daleko víc. Mně jde o to, aby se nahradilo vše, co je v <script> nějakým textem (ten tag nemusí být uzavřen). A taky aby nezáleželo na počtu nových řádků - aby se to tedy nahradilo v případě, kdy tam není žádný nový řádek a také v případě kdy jich tam je milion. Můj momentální Regex kód je tento:

/<script(.*?)>(.*?\n.*?)+(?!<\/script>)/

Bohužel ten nahrazuje při novém řádku všechno a při prázdném nic.

Předem děkuji za pomoc od všech. :)

Odpovědět 27.6.2015 17:58
Cokoliv a kdokoliv může jednou uspět.
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Odpovídá na IT Man
Patrik Smělý (SogoCZE):28.6.2015 10:08

Ahoj zkus toto nevím jestli ti to nějak pomůže ale takle to řeším já s code bbkódem.

$text = str_replace("\r\n","", preg_replace (
    "/\[script\](.*?)\[\/script\]/ism",
    "<script>Text</script>",
    nl2br($text)
));
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
Nahoru Odpovědět  +1 28.6.2015 10:08
PHP můj oblíbený jazyk......
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
IT Man:28.6.2015 10:31

Velice dobré, ale nesplňuje to 2. variantu ... a ačkoliv se snažím jakkoliv, vždy se nahradí ten tag, ale vnitřek zůstane :D
Budu zkoušet dál (a Googlit hlavně), snad na něco přijdu.

Nahoru Odpovědět 28.6.2015 10:31
Cokoliv a kdokoliv může jednou uspět.
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
IT Man:28.6.2015 11:07

Tak moc děkuji. :) To /ism na konci pomohlo. Kompletní momentální Regex, který vše splňuje, je takový:

/<script(.*?)>(.*)(?!<\/script>)/ismU
Nahoru Odpovědět 28.6.2015 11:07
Cokoliv a kdokoliv může jednou uspět.
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 4 zpráv z 4.