Avatar billede yojegergangsta Nybegynder
30. oktober 2005 - 09:01 Der er 9 kommentarer

Udeluk html tags undtagen

Hvordan kan jeg fjerne al html undtagen nogle angivne tags?

man kan bruge strip_tags("Yoyo. <p>ok</p>", "<p>"), men jeg ønsker stadig at se de html tags der ikke var lovlige, så man skal vel bruge htmlentities eller htmlspecialchars
Avatar billede hmortensen Nybegynder
30. oktober 2005 - 10:51 #1
Måske:
$a = array('<p>', '</p>');
$b = array('[p]', '[/p]');
$str = str_replace($a, $b, $str);
$str = htmlentities($str);
$str = str_replace($b, $a, $str);
Avatar billede nizo Nybegynder
30. oktober 2005 - 10:53 #2
<?
$str="<strong><div><p>hej</p></div></strong>";

echo strip_tags($str, '<p><div>');
?>

Du skal bare skrive de tilladte tags efter hinanden. Den her udelukker <strong> med <div> og <p> bliver vist
ex;<div><p>hej</p></div>
Avatar billede nizo Nybegynder
30. oktober 2005 - 10:54 #3
bare afvis mit svar, skulle lige læse dit spørgsmaal helt igennem først :)
Avatar billede olebole Juniormester
31. oktober 2005 - 05:25 #4
<ole>

- eller noget:

$s = "dg jkjl jlkjlkj <p style='background:yellow'>paragraf</p> dsg sd <b>fed</b> fdgdfg fgg <i style='color:red'>italic</i> fghyuiopå <p>paragraf</p> dfgdg <div>div</div> rwerwerwer";

function replCallBack($matches) {
    $aAllowed = array("b"=>1, "i"=>1); // Tilladte tags
    return $aAllowed[$matches[1]] ? $matches[0] : str_replace("<", "&lt;", $matches[0]);
}

$s = preg_replace_callback("/<\/?([a-z1-9]+)\s?[^>]*>/i", "replCallBack", $s);

print $s;

/mvh
</bole>
Avatar billede olebole Juniormester
31. oktober 2005 - 05:28 #5
- og RegExp'en kan skrumpes en anelse:
  $s = preg_replace_callback("/<\/?([a-z1-9]+)[^>]*>/i", "replCallBack", $s);
Avatar billede olebole Juniormester
31. oktober 2005 - 05:36 #6
- og så har jeg zq på fornemmelsen, det her performer bedre (men det er en utestet, 'religiøs' formodning):
  return $aAllowed[$matches[1]] ? $matches[0] : "&lt;".substr($matches[0], 1);

Der er ingen grund til at søge i strengen, når vi ved, det er det første tegn, der skal skiftes. Det kan virke som flueknebberi, men da det i forvejen er en halvtung proces, vi har gang i, gælder det om at 'spare', hvor man kan  :)
Avatar billede olebole Juniormester
31. oktober 2005 - 05:42 #7
Hehe ... jeg kan blive ved  :D
Der er kun til og med <h6>, så det endelige script kommer til at se sådan ud:

$s = "dg jkjl jlkjlkj <p style='background:yellow'>paragraf</p> dsg sd <b>fed</b> fdgdfg fgg <i style='color:red'>italic</i> fghyuiopå <p>paragraf</p> dfgdg <div>div</div> rwerwerwer";

function replCallBack($matches) {
    $aAllowed = array("b"=>1, "i"=>1);
    return $aAllowed[$matches[1]] ? $matches[0] : "&lt;".substr($matches[0], 1);
}

$s = preg_replace_callback("/<\/?([a-z1-6]+)[^>]*>/i", "replCallBack", $s);

print $s;
Avatar billede yojegergangsta Nybegynder
07. november 2005 - 06:54 #8
Perfekt olebole. Men hvordan sørger jeg for at det ikke virker medmindre der også er et afsluttende tag?
Avatar billede yojegergangsta Nybegynder
07. november 2005 - 06:54 #9
og smid lige et 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