php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.10.2004, 13:48  
Gast
 
Beiträge: n/a
Standard [Erledigt] pcre: Falsches Setzen von Tags verhindern

Hallo!

Ich möchte verhindern, dass jemand mit BBCode block elemente innerhalb inline elemente setzt
(z.B.: <b*>*<div*>*</div>*[/b] soll mit <b*>*[/b]<div*>*</div>* ersetzt werden).

Hier ist mein Script:

PHP-Code:
<?php
    
//test string
    
$str "[b]bla<div id=\"2\">bla</div>foobar[/b]";
    
//inline elemente
    
$inline = array("a","em","strong","span");
    
//falsches setzen von tags verhindern (block-elemente in inline-elemente, z.B. [b]<div></div>[/b]
    
foreach($inline as $key => $value) {
        
//<tag*>*<div*>*</div>*</tag>
        
$ausdruck "=<".$value."([^\"]*)>([^\"]*)<div([^\"]*)>([^\"]*)</div>([^\"]*)</".$value.">=siU";
        
//<tag*>*</tag><div*><tag*>*</tag*></div><tag*>*</tag>
        
$ersatz "<".$value."\\1>\\2</".$value."><div\\3><".$value."\\1>\\4</".$value."></div>
        <"
.$value."\\1>\\5</".$value.">";
        
$str preg_replace($ausdruck$ersatz$str);
    }
    echo 
$str;
?>
Wenn ich das Script laufen lasse, ersetzt er gar nichts, obwohl er das doch eigentlich sollte. Ich hab recht viel Zeit damit verbracht den Fehler zu finden, hab es aber nicht geschafft.

Hoffe ihr könnt mir helfen
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 24.10.2004, 13:03  
Gast
 
Beiträge: n/a
Standard

Also so ganz hab ich nicht verstanden, was du eigentlich willst, aber um DInge aus Strings zu ersetzen oder zu entfernen mach ich das immer so

PHP-Code:
<?php

test
-string
$text 
"Hallo, wie gehts denn so?";

$text str_replace("Hallo""Hi"$text);
print 
$text;

?>
Ausgabe: "Hi, wie gehts denn so?"
  Mit Zitat antworten
Alt 25.10.2004, 09:15  
Erfahrener Benutzer
 
Registriert seit: 19.10.2004
Beiträge: 498
marsch
Standard Re: pcre: Falsches Setzen von Tags verhindern

Zitat:
Zitat von Manithu
Hallo!

Ich möchte verhindern, dass jemand mit BBCode block elemente innerhalb inline elemente setzt
(z.B.: <b*>*<div*>*</div>*[/b] soll mit <b*>*[/b]<div*>*</div>* ersetzt werden).

Hier ist mein Script:

PHP-Code:
<?php
    
//test string
    
$str "[b]bla<div id=\"2\">bla</div>foobar[/b]";
    
//inline elemente
    
$inline = array("a","em","strong","span");
    
//falsches setzen von tags verhindern (block-elemente in inline-elemente, z.B. [b]<div></div>[/b]
    
foreach($inline as $key => $value) {
        
//<tag*>*<div*>*</div>*</tag>
        
$ausdruck "=<".$value."([^\"]*)>([^\"]*)<div([^\"]*)>([^\"]*)</div>([^\"]*)</".$value.">=siU";
        
//<tag*>*</tag><div*><tag*>*</tag*></div><tag*>*</tag>
        
$ersatz "<".$value."\\1>\\2</".$value."><div\\3><".$value."\\1>\\4</".$value."></div>
        <"
.$value."\\1>\\5</".$value.">";
        
$str preg_replace($ausdruck$ersatz$str);
    }
    echo 
$str;
?>
Wenn ich das Script laufen lasse, ersetzt er gar nichts, obwohl er das doch eigentlich sollte. Ich hab recht viel Zeit damit verbracht den Fehler zu finden, hab es aber nicht geschafft.

Hoffe ihr könnt mir helfen
Mal sehen, es sieht gar nicht so verkehrt aus

PHP-Code:
<?php
    
//test string
    
$str "[b]bla<div id=\"2\">bla</div>foobar[/b]";
    
//inline elemente
    
$inline = array("a","em","strong","span");
    
//falsches setzen von tags verhindern (block-elemente in inline-elemente, z.B. [b]<div></div>[/b]
    
foreach($inline as $key => $value) {
        
//<tag*>*<div*>*</div>*</tag>
        // ich mag dieses Zusammenwürfeln nicht, also sprintf, und es gibt keinen Grund für Ungreediness
        
ausdruck sprintf ("=<%s([^>]*)>([^\"]*)<div([^>]*)>([^<]*)</div>([^<]*)</%s>=si"$value$value);
        
//<tag*>*</tag><div*><tag*>*</tag*></div><tag*>*</tag>
        // ...sprintf...
        
$ersatz   sprintf ("<%s\\1>\\2</%s><div\\3><%s\\1>\\4</%s></div><%s\\1>\\5</%s>"$value$value$value$value$value$value);
        
$str preg_replace($ausdruck$ersatz$str);
    }
    
// liefert bei mir: [b]bla[/b]<div id="2">[b]bla[/b]</div>[b]foobar[/b]
    
echo $str;
?>
--

Marco
marsch ist offline   Mit Zitat antworten
Alt 26.10.2004, 23:11  
Gast
 
Beiträge: n/a
Standard

Vielen Dank Marco!

Es funktioniert, echt nett von dir
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
tags verhindern? PHP Tipps 2004 1 07.07.2004 17:22


Alle Zeitangaben in WEZ +2. Es ist jetzt 19:17 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.