Gå til innhold

preq_replace og strip_tags problem


Anbefalte innlegg

Har en shoutbox, der jeg skal erstatte div. tagger i $name og $message, koden for replace:

 

   $message = preg_replace("/<script(.*)>(.*)<\/script>/i", "<br />", $message);
   $name = preg_replace("/<script(.*)>(.*)<\/script>/i", "<br />", $name);
   $message = preg_replace("/<font(.*)>(.*)<\/font>/i", "<br />", $message);
   $name = preg_replace("/<font(.*)>(.*)<\/font>/i", "", $name);

   $badTags = array("<p />", "<p/>", "<br>");
   $repTags = array("<p></p>", "<p></p>", "<br />");
   $message = preg_replace($badTags, $repTags, $message);
   $name = preg_replace($badTags, "", $name);

   $allowedTags = '<br><p>';
   $message = strip_tags($message, $allowedTags);
   $name = strip_tags($name, $allowedTags);

   $remove = array("\r\n\r\n", "\r\n", "<p />");
   $replace = array("<p></p>", "<br />", "<p></p>");
   $message = str_replace($remove, $replace, $message);

   $letters = array("Æ", "æ", "Ø", "ø", "Å", "å");
   $repLetters = array("Æ", "æ", "Ø", "ø", "Å", "å");
   $message = str_replace($letters, $repLetters, $message);
   $name = str_replace($letters, $repLetters, $name);

 

 

Så når jeg da poster feks:

<script script="java">script java</script>

i message, så får jeg output:

<br / />

 

hvorfor det?

 

hvis jeg da legger på en liten del nederst, for å fikse denne feilen:

   $errorTags = array("<br / />");
   $repError = array("<br />");
   $message = preg_replace($errorTags, $repError, $message);

så får jeg output:

<<br />>

 

 

Post mulige løsninger for å løse dette problemet

 

Link til shoutbox'n

Lenke til kommentar
Videoannonse
Annonse

Har testet litt på min maskin, og får ikke fram samme problemet. Det skal ikke være nødvendig å escape / i replacement string. Fant ikke noe svar på bugs.php.net heller.

 

Nevner i samme slengen at du bør ha /s modifier på din regex for message:

"/<script(.*)>(.*)<\/script>/is" eller litt kortere "<script.*<\/script>/is"

ettersom linjeskift i evt. <script> tag vil gjøre at den ikke fåretar replace.

 

Har du prøvd å poste:

<scr<font></font>ipt>alert("Funny joke goes here");</script>
som navn? :innocent: Endret av stiber
Lenke til kommentar

<br> blir til <br /> regner med at dette vil gi ønsket resultat:

$message = preg_replace("/<script(.*)>(.*)<\/script>/i", "<br>", $message);
  $name = preg_replace("/<script(.*)>(.*)<\/script>/i", "<br>", $name);

 

EDIT: Skrev alt på nytt :)

Endret av kakkle
Lenke til kommentar

Takker kakkle, den funka - selv om det var litt av en omvei :p

først forandre det til en ting, så forandre det igjen - den br-taggen

men det funka, da er det greit.

 

Til de andre: testa kun kakkles løsning, men takk for god nok respons. Funker som det skal nå.

 

 

EDIT:

Funka ikke helt nei

andre ting fikk en dobbel slash nå, må teste ut litt til

Endret av Thurloc
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...