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

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

Avatar
IT Man
Redaktor
Avatar
IT Man:

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
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Patrik Smělý (SogoCZE)
Tým ITnetwork
Avatar
Odpovídá na IT Man
Patrik Smělý (SogoCZE):

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:

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
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Patrik Smělý (SogoCZE)
IT Man:

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
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
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.