Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

regular expression probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zou graag de gebruikers van mijn website toelaten de volgende html-tags te gebruiker: <b><i><u><a><img>. Deze worden vervolgens vervangen door een span-tag om het geheel netjes te houden. Nu zit ik met het probleem dat alle andere tags onklaar moeten gemaakt worden. Daarom had ik het gedacht van alle "<" en ">" te vervangen door "
code:
1
&lt;
" en "
code:
1
&gt;
". Nu heb ik een beetje zitten zoeken hoe ik mijn regular expressions moet aanpassen om alles tags die niet beginnen met <span of <a of <img te vervangen door "<".

Tot nu toe is dit mijn code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function ubb($var1) {
         
    $var1   = preg_replace('/\<b\>(.*?)\<\/b\>/i',  '<span class="strong">\\1</span>',      $var1);
    $var1   = preg_replace('/\<u\>(.*?)\<\/u\>/i',  '<span class="underline">\\1</span>',   $var1);
    $var1   = preg_replace('/\<i\>(.*?)\<\/i\>/i',  '<span class="italic">\\1</span>',      $var1);
    $var1   = preg_replace('/\<a href="(.*?)">(.*?)\<\/a\>/i',  '<a href="\\1" target="_blanc" title="test">\\2</a>',   $var1);
    $var1   = preg_replace('/\<img src="(.*?)"\>/i',    '<img src="\\1" alt="" title="" border="0">',       $var1);
        
    $var1   = preg_replace('/<noscript>/i',     '&lt;noscript&gt;',         $var1);
    $var1   = preg_replace('/<\/noscript>/i',   '&lt;/noscript&gt;',        $var1);
            
    $var1   = preg_replace('/<^span/i',     '&lt;',         $var1);
            
    return $var1;
        
}


Ik heb getracht via ^ alles er uit te filteren, maar dit werkt dus niet. Iemand een ideetje? Of verbeteringen want ik ben niet zo goed met dat soort zaken..

  • P.O. Box
  • Registratie: Augustus 2005
  • Niet online
waarom vervang je niet alle < en > eerst en daarna alle
code:
1
&lt;b&gt;
en dergelijk daarna weer terug...?

[ Voor 6% gewijzigd door P.O. Box op 09-07-2008 13:01 ]


  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 08-10 13:03
Deze functie iets? http://nl3.php.net/strip_tags

PHP:
1
2
 //de tweede parameter in de functie bevat toegestane tags
echo strip_tags($myText, '<b><i><u><a><img>');

[ Voor 19% gewijzigd door Rekcor op 09-07-2008 13:22 ]


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 06:04

Sebazzz

3dp

Rekcor schreef op woensdag 09 juli 2008 @ 13:21:
Deze functie iets? http://nl3.php.net/strip_tags

PHP:
1
2
 //de tweede parameter in de functie bevat toegestane tags
echo strip_tags($myText, '<b><i><u><a><img>');
Dat wil je niet hebben. Dan stript hij ook de inhoud van de tags. Met een tech/tweakers achtige website ook niet wenselijk. De methode van Edward lijkt mij beter.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • mocean
  • Registratie: November 2000
  • Laatst online: 04-09 10:34
Je functie heet al 'ubb', waarom dan HTML toestaan?
Zoals op vele fora (incl. tweakers), gebruik je vierkant haken voor ubb, dan ontloop je je problemen.
Dan gewoon < en > vervangen, en daarna de ubb tags fixen.

Koop of verkoop je webshop: ecquisition.com


Verwijderd

Topicstarter
Ik heb het aangepast naar Edward zijn versie en heb nu

code:
1
2
3
4
5
6
7
8
9
10
    $var1   = preg_replace('/</i',  '&lt;',         $var1);
    $var1   = preg_replace('/>/i',  '&gt;',         $var1);
         
    $var1   = preg_replace('/&lt;b&gt;(.*?)&lt;\/b&gt;/i',  '<span class="strong">\\1</span>',      $var1);
    $var1   = preg_replace('/&lt;u&gt;(.*?)&lt;\/u&gt;/i',  '<span class="underline">\\1</span>',   $var1);
    $var1   = preg_replace('/&lt;i&gt;(.*?)&lt;\/i&gt;/i',  '<span class="italic">\\1</span>',      $var1);
    $var1   = preg_replace('/&lt;a href="(.*?)"&gt;(.*?)&lt;\/a&gt;/i',     '<a href="\\1" target="_blanc" title="test">\\2</a>',   $var1);
    $var1   = preg_replace('/&lt;img src="(.*?)"&gt;/i',    '<img src="\\1" alt="" title="" border="0">',       $var1);
            
    return $var1;


Maar de replace functie voor een anchor werkt nog steeds niet... Dat geeft nu als output: <a href="test">test</a>

Ik heb het verander naar rechte haken en nu werkt het wel.

[ Voor 3% gewijzigd door Verwijderd op 09-07-2008 15:06 ]


  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 08-10 13:03
Sebazzz schreef op woensdag 09 juli 2008 @ 13:24:
Dat wil je niet hebben. Dan stript hij ook de inhoud van de tags.
:?

PHP:
1
2
3
4
$html = "Striptags laat de <i>inhoud</i> van de tags gewoon netjes staan hoor:";
echo $html;
echo '<br>';
echo strip_tags($html);


Geeft gewoon netjes:
Striptags laat de inhoud van de tags gewoon netjes staan hoor:
Striptags laat de inhoud van de tags gewoon netjes staan hoor:
dus de inhoud blijft staan.
Sebazzz schreef op woensdag 09 juli 2008 @ 13:24:
Met een tech/tweakers achtige website ook niet wenselijk. De methode van Edward lijkt mij beter.
Deze opmerking begrijp ik niet? Bedoel je dat simpele oplossingen op een tech/tweakers-achtige website niet wenselijk zijn? ;)

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 06:04

Sebazzz

3dp

Bekijk dat example nog eens. Je ziet dat alles tussen <!-- en --> verdwijnt.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 08-10 13:03
Sebazzz schreef op woensdag 09 juli 2008 @ 15:28:
Bekijk dat example nog eens. Je ziet dat alles tussen <!-- en --> verdwijnt.
Goed, het is bijna vijf uur (dus waarschijnlijk ligt het daar aan), maar ik kan geen example met <!-- en --> vinden? Ook als ik in de browser zoek op '<!-- ' krijg ik alleen jouw post :).

In ieder geval:

PHP:
1
2
$html = "<!-- Comment --> Volgens mij laat striptags de <i>tekst</i> in de tags gewoon staan";
echo strip_tags($html);


geeft:

HTML:
1
<!-- Comment -->Volgens mij laat striptags the tekst in de tags gewoon staan

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 06:04

Sebazzz

3dp

Op de php manual natuurlijk he. Sorry. vijf uur ja :P

PHP:
1
2
3
4
5
6
7
8
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>

HTML:
1
2
Test paragraph. Other text
<p>Test paragraph.</p> <a href="#fragment">Other text</a>


Bovendien worden attributen op tags niet gestript. Attributen zoals mouseover en style. Ik krijg misschien geen gelijk, maar ik heb het wel :p

[ Voor 15% gewijzigd door Sebazzz op 09-07-2008 16:29 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • Rekcor
  • Registratie: Februari 2005
  • Laatst online: 08-10 13:03
Sebazzz schreef op woensdag 09 juli 2008 @ 16:25:
Bovendien worden attributen op tags niet gestript. Attributen zoals mouseover en style. Ik krijg misschien geen gelijk, maar ik heb het wel :p
Bij deze! (was vergeten mijn pagina te refreshen 8)7)

  • funkwurm
  • Registratie: December 2005
  • Laatst online: 22-02-2021
Misschien een beetje mosterd na de maaltijd maar had dit:
PHP:
1
$var1    = preg_replace('/<^span/i',     '&lt;',         $var1);

Niet simpel gekund met een negative lookahead? Iets als:
PHP:
1
$var1    = preg_replace('/<(?!span|img|a href)/i',     '&lt;',         $var1);
Pagina: 1