Avatar billede mtrolle Nybegynder
18. december 2007 - 12:33 Der er 3 kommentarer og
1 løsning

str_replace i replacement på resultatet af preg_replace

Hejsa,

Jeg skal spytte noget javascript ud via php til en JS fil. Dvs. jeg skal skrive fx
echo"document.write('jul i nisseland');";

I document.write må man ikke bruge linjeskift (\n) så de skal fjernes.
Jeg har en lang kode som til sidsts spytter en variabel ud der kunne ligne denne:

$print = "myname = 'mtrolle';
start = '". time() ."';
show = 'x2!';
document.write('så kommer der lidt HTML
med linjeskift :(
'+show+'
og slut');";

I print vil jeg altså gerne fjerne de linjeskift der står mellem document.write(' og ');
Har forsøgt med følgende:
$print = preg_replace("/document.write\('(.*?)'\);/si","document.write('".str_replace("\n",'',str_replace("\r\n",'',"\\1"))."');",$print);

str_replace virker bare ikke som replacestring på preg_replace. Følgende ville virke fx:
$print = preg_replace("/document.write\('(.*?)'\);/si","document.write('\\1",$print);
men jeg vil gerne tage \\1 og fjerne alle \r\n og \n

Nogen ideer?

mtrolle
Avatar billede nielle Nybegynder
18. december 2007 - 12:50 #1
Prøv at evt. kigge på preg_replace_callback():

http://dk2.php.net/preg_replace_callback

Alternativt kan du starte med en preg_replace i stil med:

$print = preg_replace('/(\r|\n)/si', ' ', $print);
Avatar billede barklund Nybegynder
18. december 2007 - 13:34 #2
Du skal jo i virkeligheden fange alle strenge - ikke kun dem inden for document.write. Og du skal fange alle strenge i både enkelt og dobbelt quotes. Og ikke stoppe med at match'e, hvis du rammer en "escaped" quote, som jo skal være dobbeltescapet og dermed stå som en plain quote der blot har en backslash inden :)

Sanitizing af javascript er lidt mere komplekst end som så :)

Med mindre du ved, at kun ovenstående kan være tilfældet.

--
Morten Barklund
Avatar billede mtrolle Nybegynder
18. december 2007 - 16:21 #3
>nielle
preg_replace_callback() er jo svaret på alle kvaler :)
Smid et svar og få nogle point :)
Avatar billede nielle Nybegynder
18. december 2007 - 19:28 #4
Svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester