style weghalen uit html

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bart niethenk

bart niethenk

19/10/2009 16:25:00
Quote Anchor link
hallo iedereen ik heb nu een from met 1 input veld.
nu wil ik in dat inputveld bijv een html pagina die ik nu heb alle _style's_ eruit halen.


hoe kan ik dit het beste doen ik dacht aan een regex maar dan?
preg_replace?
en dan welke regex?


dus ik paste zeg maar de bron code in het formulier en dan druk ik op sumbit en dan is het de bedoeling dat alle style attributen er gewoon kompleet eruit gaan.

groet bart


btw nu heb ik dit :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
    <textarea cols="250" rows="500" name="tekst"></textarea>
    <input type="submit" value="vervang">
    </form>'
;

    $tekst = $_POST['tekst'];
    $regex = '/style=".*"/';


    preg_replace($regex, "", $tekst);

    echo $tekst;
?>


als ik het goed begrijp doet preg_replace(vervangdit, metdit, vandezetekst)
of zie ik dat verkeerd?
Gewijzigd op 01/01/1970 01:00:00 door Bart niethenk
 
PHP hulp

PHP hulp

21/11/2024 22:56:04
 
Jan Kila

Jan Kila

19/10/2009 16:34:00
Quote Anchor link
Als dit alles is; gebruik dan str_replace, sneller, duidelijker.
 
Bart niethenk

bart niethenk

19/10/2009 16:37:00
Quote Anchor link
Jan H. Kila schreef op 19.10.2009 16:34:
Als dit alles is; gebruik dan str_replace, sneller, duidelijker.


ok en dan heb ik nu :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
    <textarea cols="10" rows="10" name="tekst"></textarea>
    <input type="submit" value="vervang">
    </form>'
;

    $tekst = $_POST['tekst'];
    $regex = '/style=".*"/';


    str_replace($regex, "", $tekst);

    echo $tekst;
?>

maar ik krijg nog steeds niet de goeie output.


nu wil ik dus als ik bijv. dit heb " <span style="color: #0000BB"> "
dat de style gewoon helemaal verwijderd word zodat ik alleen " <span>" overhoud
Gewijzigd op 01/01/1970 01:00:00 door bart niethenk
 

19/10/2009 16:39:00
Quote Anchor link
Klooi eens met http://www.gskinner.com/RegExr/
Dan kan je zien wat er gematcht wordt.

Volgens mij is het in dit geval wel goed om regex'en te gebruiken, aangezien je niet precies weet welke style er is.
Gewijzigd op 01/01/1970 01:00:00 door
 
Bart niethenk

bart niethenk

19/10/2009 16:48:00
Quote Anchor link
Karl schreef op 19.10.2009 16:39:
Klooi eens met http://www.gskinner.com/RegExr/
Dan kan je zien wat er gematcht wordt.

Volgens mij is het in dit geval wel goed om regex'en te gebruiken, aangezien je niet precies weet welke style er is.



ik neem wat highlighted is in het twee boxje is wat gereplaced gaat worden want staat heel mooi in blauw en dat moet weg maar bij mij werkt het toch niet ...
 

19/10/2009 16:52:00
Quote Anchor link
Zie bovenaan, daar staat replace.
In het input vakje, die ene regel kan je je regex maken. In dat onderste grote vak stop je de tekst waar je de regex voor wilt maken.
Wil je de regex gebruiken, dan kopieer je hem bij RegExp: weg.
 
Bart niethenk

bart niethenk

19/10/2009 16:58:00
Quote Anchor link
Karl schreef op 19.10.2009 16:52:
Zie bovenaan, daar staat replace.
In het input vakje, die ene regel kan je je regex maken. In dat onderste grote vak stop je de tekst waar je de regex voor wilt maken.
Wil je de regex gebruiken, dan kopieer je hem bij RegExp: weg.



zoals dit? :
http://img207.imageshack.us/i/aaady.jpg/
 

19/10/2009 17:03:00
Quote Anchor link
bart schreef op 19.10.2009 16:58:
Karl schreef op 19.10.2009 16:52:
Zie bovenaan, daar staat replace.
In het input vakje, die ene regel kan je je regex maken. In dat onderste grote vak stop je de tekst waar je de regex voor wilt maken.
Wil je de regex gebruiken, dan kopieer je hem bij RegExp: weg.



zoals dit? :
http://img207.imageshack.us/i/aaady.jpg/

Ja.
 
Bart niethenk

bart niethenk

19/10/2009 17:05:00
Quote Anchor link
Karl schreef op 19.10.2009 17:03:
bart schreef op 19.10.2009 16:58:
Karl schreef op 19.10.2009 16:52:
Zie bovenaan, daar staat replace.
In het input vakje, die ene regel kan je je regex maken. In dat onderste grote vak stop je de tekst waar je de regex voor wilt maken.
Wil je de regex gebruiken, dan kopieer je hem bij RegExp: weg.



zoals dit? :
http://img207.imageshack.us/i/aaady.jpg/

Ja.


en wat lichtblauw is word vervangen?
if so dan werkt het nog steeds niet -.-
Gewijzigd op 01/01/1970 01:00:00 door bart niethenk
 

19/10/2009 17:10:00
 
Bart niethenk

bart niethenk

19/10/2009 17:38:00
Quote Anchor link


bedankt karl het werkt nu :D
 
Bart niethenk

bart niethenk

20/10/2009 15:11:00
Quote Anchor link
ok nieuw probleem ik moet alles behalve <br/>'s en <p>' s erin laten
moet ik meerdere regexes maken of kan het met 1?
want ik heb net meerdere regexes geprobeerd maar dat lukte niet.(zelfde var naam andere regex).
en toen voerde het script niets uit heel raar.


thnkx
 
Bart niethenk

bart niethenk

21/10/2009 09:56:00
Quote Anchor link
nieuwe dag nieuwe kansen :D
probleem is helaas nog steeds niet opgelost

eigenlijk wil ik wel alle opmaak attributen eruit halen.
wat is een goeie manier om dit te doen?
weer een regex?
Gewijzigd op 01/01/1970 01:00:00 door bart niethenk
 
Mark L

Mark L

21/10/2009 11:45:00
Quote Anchor link
Met dat <br /> en <p> probleem heb ik deze oplossing voor je: strip_tags();

En wat er eigenlijk nog fout zou zijn aan je bovengebruikte regex, is dat als je dit zou hebben:

<span style="color: green;">
Om een div een grootte van 15 pixels te maken, moet je dit zetten tussen style="". Dit wordt dan: style="width: 15px;".
</span>

Hier moet 1x iets verwijderd worden, maar het gebeurd 3 keer. Terwijl je alleen bij de html-elements moet zoeken. Ook word volgens mij dit niet ge-replaced: style=width:15px;
Nu weet ik niet of dit ook kan bij style, maar bij src etc. zie ik heel vaak dat mensen het zo doen.

Het enige dat je weet tussen attributen en bijvoorbeeld <div> is dat er een spatie tussen <div en class="class" zit, dus: <div class="class"id="id" style="style">

Dus je moet zoeken:
preg_replace("#<([a-z0-9]+) (.*)>#i", "<$1>", $html);

Maar dit is ook niet helemaal correct, want <br /> zou nu <br> worden. Dat willen we niet hebben natuurlijk. Dan gaat je xHTML eraan. Dus je moet eigenlijk kijken wat er in $2 zit. Of dit eindigd op een ' /' of niet.
Ikzelf zou dit zo doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$pattern
= "#<([a-z0-9]+) (.*)>#i";
$html = 'htmltext';
while (preg_match($pattern, $html, $match)) { // Hier worden de matches in $match opgeslagen.
if (preg_match("# /$#", $match[2])) { // Dit moet eigenlijk niet met preg_functie, maar met een str-functie. De preg_functie is niet nodig en is trager. Maar had ik even geen zin in.
$match[1] .= ' /';
}

$html = preg_replace($pattern, '<' . $match[1] . '>', $html);
}

?>

Dit is niet getest

Fout geconstateerd: De while gaat oneindig door als er een <br /> is gevonden, deze vervangt hij door een <br /> Haha.
Mogelijke oplossing: De $2 verplichten om langer te zijn dan 2 tekens, want een attribuut moet dat zoizo zijn: a=b -> 3 tekens. Dan wordt de pattern dus:
"#<([a-z0-9]+) (.*){3,}>#i"
Nu weet ik ook even niet uit mijn hoofd of < en > gestript moeten worden, maar volgens mij wel. De pattern wordt dan:
"#\<([a-z0-9]+) (.*){3,}\>#i"
Gewijzigd op 01/01/1970 01:00:00 door Mark L
 

21/10/2009 12:03:00
Quote Anchor link
Miloan, die regexen werken niet...
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="z-index: 1;">
gaat er gewoon door een, nog wel meer dingen gaan er doorheen.
 
Mark L

Mark L

21/10/2009 12:17:00
Quote Anchor link
@ Karl, als ik 't test bij http://www.gskinner.com/RegExr/, gaat
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="z-index: 1;"> er niet door..
Ik gebruikte mijn laatste: "#\<([a-z0-9]+) (.*){3,}\>#i". Dit wordt dus "\<([a-z0-9]+) (.*){3,}\>" met ignoreCase aan.
 

21/10/2009 12:56:00
Quote Anchor link
Miloan schreef op 21.10.2009 12:17:
@ Karl, als ik 't test bij http://www.gskinner.com/RegExr/, gaat
<table width="100%" border="0" cellspacing="0" cellpadding="0" style="z-index: 1;"> er niet door..
Ik gebruikte mijn laatste: "#\<([a-z0-9]+) (.*){3,}\>#i". Dit wordt dus "\<([a-z0-9]+) (.*){3,}\>" met ignoreCase aan.

Ik had ven moeten aangeven dat ik gewoon een stuk html d'r in gestopt had.
Test het maar eens met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
44
45
46
47
48
49
50
51
52
53
54
<html>
<head>
<title>PHPhulp - PHP Forum - style weghalen uit html</title>
<meta name="keywords" content="php, php algemeen, php hulp, phphulp, php support, php scripts, php tutorials, php links, php boeken, help, hulp, programmeren, programmering, mysql, databases, sql, webdesign, webmasters, boeken, ict, php help, php functies, php artikelen, scripts, functies, tutorials, artikelen, programming, programmers, xml, array, arrays, forum, forums, login, how to, language, articles, library">
<meta name="description" content="Alles over PHP. PHP scripts, PHP tutorials, PHP links, PHP boeken, een PHP forum en nog veel meer..">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript" language="JavaScript1.2" src="/cfgs/stm31.js"></script>
<link rel="stylesheet" href="/cfgs/phphulp.css" type="text/css" media="all">
<link rel="stylesheet" href="/cfgs/forum.css" type="text/css" media="all">
</head>

<body>
<!-- main table (including background -->
<table width="770" height="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="left" valign="top">

    <table width="100%" border="0" cellspacing="0" cellpadding="0">
    <tr>
    <td width="33%" height="153" align="left" valign="top">

        <!-- header (logo -->
        <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
        <td align="left" valign="top"><a href="http://www.phphulp.nl" title="PHPhulp"><img src="/imgs/header/logo.gif" width="258" height="108" alt="PHPhulp" border="0"></a></td>
        </tr>
        <tr>
        <td valign="middle" background="/imgs/header/bluebackground.gif" class="loggedin" height="27" align="left" valign="top">
        <b>Ingelogd als:</b> <a href="/profiel/user/14017/" title="Bekijk je profiel">Karl</a>        </td>
        </tr>
        <tr>
        <td height="18">&nbsp;</td>
        </tr>
        </table>

    </td>
    <td width="67%" align="left" valign="top">        <!-- menu -->
                <table width="100%" border="0" cellspacing="0" cellpadding="0" style="z-index: 1;">
        <tr>
        <td width="34%" align="left" valign="top"><img src="/imgs/header/top_left.gif" width="176" height="99" alt="Header image"></td>
        <td width="66%" background="/imgs/header/right_bg.gif" align="left" valign="top">
        <div onmouseover="hide('advertenties')" onmouseout="show('advertenties')"><script type="text/javascript" language="JavaScript1.2" src="/cfgs/menu.js" style="z-index: 1;"></script></div></td>        </tr>
        <tr>

        <td height="26" colspan="2" background="/imgs/header/inloggen/background_logged_in.gif" align="left" valign="top" class="white"><img src="/imgs/layout/mascotte.gif" alt="PHPhulp's mascotte" width="10" height="10"> <a href="/profiel/instellingen/" title="persoonlijke instellingen">instellingen</a> | <a href="/profiel/favorieten/" title="interne favorieten">interne favorieten</a> | <a href="/profiel/mailbox/" title="interne berichten">interne berichten</a> | <a href="/profiel/statistieken/" title="persoonlijke statistieken">statistieken</a> | <a href="/uitloggen/14017" title="uitloggen">uitloggen</a>
        </td>
        </tr>
        <tr>
        <td background="/imgs/header/inloggen/bot_bg.gif" height="19" colspan="2" align="left" valign="top">&nbsp;</td>
        </tr>
        </table>
        </form>    </td>
    </tr>
    </table>

Afbeelding
 
Mark L

Mark L

21/10/2009 18:09:00
Quote Anchor link
In je plaatje zie ik niets dat fout gepakt wordt, als ik zelf probeer zie ik niets wat niet gepakt wordt en als ik het replace, krijg ik dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
44
45
46
47
48
49
50
51
52
53
54
<html>
<head>
<title>PHPhulp - PHP Forum - style weghalen uit html</title>
<meta>
<meta>
<meta>
<script>
<link>
<link>
</head>

<body>
<!-- main table (including background -->
<table>
<tr>
<td>

    <table>
    <tr>
    <td>

        <!-- header (logo -->
        <table>
        <tr>
        <td>
        </tr>
        <tr>
        <td>
        <b>Ingelogd als:</b> <a>
        </tr>
        <tr>
        <td>
        </tr>
        </table>

    </td>
    <td>
                <table>
        <tr>
        <td>
        <td>
        <div>
        <tr>

        <td>
        </td>
        </tr>
        <tr>
        <td>
        </tr>
        </table>
        </form>    </td>
    </tr>
    </table>


Geen attribuut te zien. Sorry, maar ik zie het niet.

Ik weet alleen wel dat < en > niet ge-escaped hoeft te worden ;) Dus \< en \> is niet nodig.
 

21/10/2009 18:40:00
Quote Anchor link
Hmm, vreemd.
Ik heb het even met wat minder html geprobeerd, nu werkt het wel goed.
Die tool werkt af en toe niet helemaal correct zoals je zou verwachten, dat komt door de actionscript.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.