[html] html-tags strippen in PHP of een shell tool

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 06-05 19:28
Ik zoek een tool (PHP class, of een executable voor Linux), waarmee je HTML tags kunt weghalen of anders opmaken. De PHP-functie strip_tags of HTML Tidy voldoen niet (zover ik weet), omdat ik bijvoorbeeld wel bepaalde tags wil houden maar bepaalde attributen wil weghalen, b.v. in
code:
1
<p style='background: red'>dit is rood</p>
wil ik de style-attribute weghebben (of eigenlijk alle attributen). Zo wil ik ook tabellen op corectheid controleren. Dus dat je geen misvormde tabellen kunt krijgen.


Ik ben al begonnen met eigen grammatica voor de tags die ik erin wil hebben, maar ja, misschien zijn er mensen die mij voor zijn geweest :D

Iemand een idee, welke tool ik zou kunnen gebruiken?

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
http://nl.php.net/manual/en/function.strip-tags.php kan alles voor je weghalen. Dat is de enige standaard mogelijkheid. Anders moet je een regexp gebruiken. Je kunt het ook nog op een lompe manier aanpakken trouwens:
exploden op < en > en dan kijken of je attributen tegenkomt enzo. Maar dan is een regexp handiger.

[ Voor 85% gewijzigd door djluc op 10-04-2004 13:15 ]


Acties:
  • 0 Henk 'm!

  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Als je html xhtml complient is dan is het vrij eenvoudig. Als dit niet zo is dan wordt het lastiger. Je zal dan met regexp de verschillende zaken moeten vervangen.

I'm not a complete idiot - several parts are missing.


Acties:
  • 0 Henk 'm!

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 06-05 19:28
Zoals ik al zei, ik wil vooral attributen in bepaalde tags weghalen. En met RegEx kom je er niet (snel), je moet echt een grammatica maken en daarmee de taal/code doorlopen.

Acties:
  • 0 Henk 'm!

  • stekkel
  • Registratie: Augustus 2001
  • Laatst online: 17-09 08:05
Ik ben toevallig net met zo iets bezig en ik los het op door eerst een domtree te bouwen en daarna door die tree te lopen en de nodige tag/attribute rewrites te doen.
Ben inmiddels in staat om via callback functies die ik registreer per tag of attribute de nodige handelingen op die domtree te doen.

doordat alles in een domtree is het dus heel eenvoudig om tables te reparen, wat ik dan ook doe.

Een andere aanpak, gebaseerd op reg expressions staat op http://linux.duke.edu/pro...htmlfilter/htmlfilter.inc

Die werkt prima maar bij grote lappen html text is die wat traag door al die reg expressions.

[ Voor 10% gewijzigd door stekkel op 10-04-2004 14:29 . Reden: table repair toegevoegd ]


Acties:
  • 0 Henk 'm!

  • ddofborg
  • Registratie: Augustus 2000
  • Laatst online: 06-05 19:28
Hier werkt het een beetje... alleen nog ff kijken wat ik het URLs doe die javascript aanroepen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?php
/**
 * Allow these tags
 */
$allowedTags =
'<h1><b><i><a><ul><li><pre><hr><blockquote><img>';

/**
 * Disallow these attributes/prefix within a tag
 */
$stripAttrib = 
'onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup|style';

/**
 * @return string
 * @param string
 * @desc Strip forbidden tags and delegate tag-source check to removeEvilAttributes()
 */
function removeEvilTags($source)
{
   global $allowedTags;
   $source = strip_tags($source, $allowedTags);
   return preg_replace('/<([a-zA-Z])+\s+(.*?)>/ie', "'<\\1'.removeEvilAttributes('\\2').'>'", $source);
}

/**
 * @return string
 * @param string
 * @desc Strip forbidden attributes from a tag
 */
function removeEvilAttributes($tagSource)
{
   global $stripAttrib;

   $ret = stripslashes(preg_replace("/\s*($stripAttrib)(\s*=\s*(.*))?/i", '', $tagSource));

   return ($ret == "" ? "" : " " . $ret);
}

echo removeEvilTags('<a href="javascript:alert(1);" target="_blank" onMouseOver="alert(1)" onMouseOver="alert(1)">test</a>');
echo "<br>";
echo removeEvilTags('<a href="" style="bla">test</a>');
?>

[ Voor 17% gewijzigd door ddofborg op 10-04-2004 18:06 ]

Pagina: 1