Antworten auf deine Fragen:
Neues Thema erstellen

Antworten zum Thema „preg_replace“

netbandit

Aktives Mitglied

Hallo,

ich habe den nachfolgenden Code zusammengebastelt um in TAGS die nötigen Anführungszeichen zu ergänzen (sofern welche fehlen):


PHP:
<?php
error_reporting(E_ALL);
$text= "<table cellspacing=0 cellpadding=0 width=\"100%\" border=0>";
$text=preg_replace("/<([^>]+)=([^>\"\s]+)/", "<\\1=\"\\2\"\\3", $text);
echo $text;
?>

Hat jemand ein Idee, wie ich es anstelle, daß alle fehlenden Anführungszeichen ersetzt werden? Im Moment wird nur das letzte korrigiert bzw. beim Modifer "U" das erste.

Schonmal ein Dankeschön :)
 
Zuletzt bearbeitet:

blackout

Schaf im Wolfspelz

AW: preg_replace

Puh, ich würde das nicht per Regex machen. Du willst mit dem Script schließlich schlechten Code korrigieren, und der hat viele Gesichter, die man nicht alle in *einen* Regex packen kann.
Ein paar Beispiele:
1. Verwendung von ' statt "
2. foo='bar"baz'
4. foo="bar"baz""
5. <tablefoo=bar
Im Endeffekt ist das was du machen willst, genau die Aufgabe des Quirksmode des Browsers, ich kann deine Motivation einerseits verstehen, schließlich arbeitet jeder Browser da anders. Andererseits: Seiten, die du durch deinen PHP-Parser schicken kannst, kannst du auch gleich ordentlich schreiben, dann sind solche Korrekturen nicht nötig. (OK, bisschen idealistisch, ich weiß wie es ist ein komplettes Forum umzuschreiben) ;)


Edit: Habe seit der ersten Klasse nicht mehr bis Fünf gezählt, Entschuldigung bitte für die arme Drei. Als Entschädigung könnte ich dir nachweisen, dass die Fouriertransformation der 1 die Dirac-Delta-Funktion ist ;)
 
Zuletzt bearbeitet:

netbandit

Aktives Mitglied

AW: preg_replace

So wie ich das bisher gesehen habe, fehlen nur die Anführungs - also wenn dann komplett ohne irgendwas.
Der Sch****Code kommt von so einem "Javascript-Monster" und ich dachte mir, ich bereinige das lieber per PHP (Die Daten werden eh weiterverarbeitet). :uhm:
 

saila

Moderatorle

AW: preg_replace

Hi,

mal ein Ansatz:

PHP:
$string    = "<table cellspacing=0 cellpadding='0' width=\"100%\" border=0>";
$preg     = '#(<[a-zA-Z]+[=])+[\\\"\' ]+([\d]+)[\\\"\' ](>)#is';
$repl     = '\\1 \\2 "\\3" \\4';
$res     = preg_replace( $preg , $repl , $string );
echo $res;
 

netbandit

Aktives Mitglied

AW: preg_replace

Danke saila, aber damit komme ich im Moment auch nicht viel weiter. :uhm:

Werde es mal mit preg_match_all Tags ausprobieren und dann per Schleife mein Suchmuster verwenden.
 

netbandit

Aktives Mitglied

AW: preg_replace

Na, die Anführungszeichen :lol:

Habe es im Moment so:

PHP:
<?
error_reporting(E_ALL);
$text= "<table cellspacing=0 cellpadding=0 width=\"100%\" border='1'>
         <tr><td>irgend ein text</td></tr>
         </table><br>";
$text.= "<table cellspacing='0' cellpadding=0 width=\"100%\" border=0>
         <tr><td>irgend ein text</td></tr>
         </table>";
preg_match_all("/<([^>]+)>/", $text, $temp);
$myarr=$temp[1];
if(!empty($myarr)){
    $ct=count($myarr);
    for($i=0;$i<$ct;$i++){
        $suchmuster[$i]="/<" . preg_quote($myarr[$i], '/') . ">/";
        $ersatz[$i]='<' . preg_replace("/(.?)=([^>'\"\s]+)/", "\\1=\"\\2\"", $myarr[$i]) . '>';
    }
    if(count($suchmuster)>=1){
       $text=preg_replace($suchmuster, $ersatz, $text);
    }
}
echo $text;
?>

Arbeite aber noch weiter dran :uhm:
 

saila

Moderatorle

AW: preg_replace

Stimmt :lol:

Ist zwar nicht ausschl. bezogen auf HTML-tags, aber das funzt soweit. Kannst es ja entsprechend ergänzen für HTML-Tags.

PHP:
$preg     = array( '#([a-zA-Z]+)\=[\\\"|\\\'|\']([\d]+)[\\\"|\\\'|\']#is' , '#([a-zA-Z]+)\=([\d]+)#is' );
$repl     = array( '\\1="\\2"' , '\\1="\\2"' );
 

netbandit

Aktives Mitglied

AW: preg_replace

@saila: Da versteh ich ja jetzt gar nichts mehr. Vor allem was mich stutzig macht ist, daß Du beim Suchmuster a-zA-Z eingibst jedoch als Modifer auch ein i verwendest. Dachte eigentlich immer entweder/oder. Das \d , wofür steht das?

Und beim Ersatz; müssten da nicht eigentlich nur ein Backslash vor den Zahlen stehen wenn Hochkommas verwendet werden?

Tut mir echt leid, daß ich mich hier so dämlich anstelle. Ich versuche aber auch zu verstehen was ich hier eigentlich mache :uhm:

Bei mir sieht es im Moment so aus:

PHP:
<?
error_reporting(E_ALL);
$text= "<table cellspacing=0 cellpadding=0 width=\"100%\" border='1'>
         <tr><td>irgend ein text</td></tr>
         </table><br>";
$text.= "<table cellspacing='0' cellpadding=0 width=\"100%\" border=1>
         <tr><td>irgend ein <a href=http://www.test.de>text</a></td></tr>
         </table>";
$text=stripslashes($text);
preg_match_all("/<([^\/][^>]+)>/", $text, $temp); // Wenn ich hier noch ein Gleichheitszeichen berücksichtigen könnte, würde sich die Anzahl der Übereinstimmungen reduzieren
$myarr=$temp[1];
if(!empty($myarr)){
    $ct=count($myarr);
    for($i=0;$i<$ct;$i++){
        $suchmuster[$i]='/<' . preg_quote($myarr[$i], '/') . '>/';
        $ersatz[$i]='<' . preg_replace("/([a-z])=([^'\"\s]+)/i", "\\1=\"\\2\"", $myarr[$i]) . '>';
    }
    if(count($suchmuster)>=1){
       $text=preg_replace($suchmuster, $ersatz, $text);
    }
}
echo $text;
?>
Grundsätzlich passiert ja schonmal das, was ich haben möchte. Zeile 10 (Kommentar) macht mich im Moment noch fertig :D

Edit: Ich glaube ich hab es geschafft

PHP:
<?
error_reporting(E_ALL);
$text= "<table cellspacing=0 cellpadding=0 width=\"100%\" border='1'>
         <tr><td>irgend ein text</td></tr>
         </table><br>";
$text.= "<table cellspacing='0' cellpadding=0 width=\"100%\" border=1>
         <tr><td>irgend ein <a href=http://www.test.de>text</a></td></tr>
         </table>";
$text=stripslashes($text);
preg_match_all("/<(([^\/][^>]+)\=([^>]+))>/", $text, $temp);
$myarr=$temp[1];
if(!empty($myarr)){
    $ct=count($myarr);
    #echo $ct;
    for($i=0;$i<$ct;$i++){
        $suchmuster[$i]='/<' . preg_quote($myarr[$i], '/') . '>/';
        $ersatz[$i]='<' . preg_replace("/([a-z])\=([^'\"\s]+)/i", "\\1=\"\\2\"", $myarr[$i]) . '>';
    }
    if(count($suchmuster)>=1){
       $text=preg_replace($suchmuster, $ersatz, $text);
    }
}
echo $text;
?>

Wenn jemand noch Fehler findet, bitte melden :)
 
Zuletzt bearbeitet:

saila

Moderatorle

AW: preg_replace

Hast du es getestet?

Erläuterung zum Suchmuster:

'#([a-zA-Z]+)\=[\\\"|\\\'|\']([\d]+)[\\\"|\\\'|\']#is' , '#([a-zA-Z]+)\=([\d]+)#is'

[a-zA-Z] für cellspacing oder cellpadding oder align usw.. und das + führ mehrere Buchstaben in Folge.
([\d]+) für [0-9] und + für mehrere Zahlen (4) oder (100) in Folge.
[\\\"|\\\'|\'] für Zeichen \" oder \' oder '

Modifier i steht für groß oder klein (es gibt ja so Spezialisten, welche HTML-Tags groß schreiben).
Modifier s unterteilt in einzelne Zeilen bei der Suche.

Im zweiten Suchmuster wird nach z.B. cellspacing=10 gesucht.

Im Grunde müsstest du nur noch ein evtl. % Zeichen in dem Suchmuster unterbringen, da die Suche nicht mit folgendem Erfolg hat:

widht='10%' oder width=10%

Wie schon erwähnt muss ggf. das Suchmuster insoweit ergänzt werden, das es ausschl. auf HTML-Tags zutreffend ist, was bislang nicht eintritt. Sprich der gesamte String wird durchsucht.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
175.189
Beiträge
2.582.076
Mitglieder
67.259
Neuestes Mitglied
SaschMasch1312
Oben