php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 25.10.2006, 16:09  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard Suchen und ersetzen außerhalb von HTML, dabei wird js escape

Hallo!

Mit folgendem Code suche und ersetze ich in einer Datei nach einem Suchwort und gebe sie dann aus, aber nur außerhalb vom HTML Code.

PHP-Code:
// Wenn der Parameter "rslt" existiert
 
if(isset($_GET['rslt'])) {
  
//Ausgabepuffer wird aktiviert
  
ob_start();
  
// Suchwort wird im Falle in HTML umgewandelt
  
$kw htmlentities($_GET['kw'],ENT_QUOTES);
  
$datei $_GET['rslt'];

  
// Inhalt der Datei wird in den Ausgabepuffer gepackt
  
include($datei);

  
// Inhalt des Puffers in Variable speichern
  
$DateiEcho ob_get_contents();

  
// Nur außerhalb von Tags wird das Suchwort gesucht und ersetzt und in Variable gespeichert
  
$ChgDatei preg_replace("/((<[^>]*)|$kw)/ie"'"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"'$DateiEcho);

  
// Ausgabepuffer wird deaktiviert und gereinigt
  
ob_end_clean();

  
// Der bearbeitete und gespeicherte Inhalt wird ausgegeben
  
echo $ChgDatei;
 } 
Dies funktioniert auch wunderbar, das Problem ist, das im Javascript "escaped" wird. Was ursprünglich:

Code:
var lsIdStr = 'Betreff';

war, ist nun

Code:
var lsIdStr = \'Betreff\';

Dies führt zu Fehlermeldungen, da die Hochkommas nun aufgehoben werden.

In der Zeile könnte man dies denke ich ändern oder? Aber wie?
PHP-Code:
$ChgDatei preg_replace("/((<[^>]*)|$kw)/ie"'"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"'$DateiEcho); 
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 25.10.2006, 16:51  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

So habe ich das erste Problem gelöst, ich musste einfach noch ein Hochkomma einfügen:

<?php $ChgDatei = preg_replace("/((<[^>']*)|$kw)/ie", '"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"', $DateiEcho);

Somit kommt es nicht mehr zu dem Problem, wenn jetzt aber eine Zeile, wie diese vorkommt:

Code:
onmouseover="return overlib('<a href=\'?cnt=seite.php&nav_sub=21#anker\' class=\'cnt\'>- Forming <span class="error">Anker</span></a>', STICKY, CAPTION, 'Headline',...
Wird auch inerhalb ersetzt, hier z.B. wird das Wort anker nach der Raute ersetzt, was die Ausgabe etwas komisch aussehen lässt.

Code:
onmouseover="return overlib('<a href=\'?cnt=seite.php&nav_sub=21#<span class="error">anker</span>\' class=\'cnt\'>- Forming <span class="error">Anker</span></a>', STICKY, CAPTION, 'Headline',...
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 26.10.2006, 10:12  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Kann mir jemand bitte diese Zeile erläutern:

PHP-Code:
$ChgDatei preg_replace("/((<[^>]*)|$kw)/ie"'"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"'$DateiEcho); 
Ich verstehe es so, dieser Part
PHP-Code:
((<[^>]*)|$kw)/ie", 
bedeutet, das ab dem "<" gesucht werden kann, aber nicht was innerhalb von ">" steht, *)|$kw kann ich nicht wirklich verstehen

Diesen Part verstehe ich ungefähr so:
PHP-Code:
'"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"' 
Wenn das erste oder 2te Suchmuster gefunden wird, wird es mit "\1" oder ":"<span class=\"error\">\1</span> ersetzt.

So jetzt könnt ihr schmunzeln und mich dann bitte aufklären :wink:
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 26.10.2006, 14:35  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

ich versteh es auch noch nicht so richtig, weshalb der erste oder teil gesucht wird, wenn er nachher sowieso ausgeschlossen wird. ich glaube ich hätte das mit Assertions
gemacht. Aber der Code funktioniert ganz gut, Kompliment. Nur weiß ich nicht was passiert, wenn man große Datenmengen prüft, denn wie ichs verstehe wird ja jede einzelne zusammenhängende Zeichenkette durchlaufen und ersetezt, wenn auch mit sich selbst.
@NetLook : ich glaube wenn du das ' wieder rausnimmst und den Inhalt vorher anders von Hochkommata befreist geht das einfacher..
nikosch ist offline  
Alt 27.10.2006, 11:53  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Hi!

Wie kann ich das denn hinbekommen, das auch nichts innrehalb einer Klammer ersetzt wird? Habe es so probiert:

PHP-Code:
$ChgDatei preg_replace("/((<[^\('>]*)|$kw)/ie"'"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"'$DateiEcho);

//oder auch mit ASCII Code

$ChgDatei preg_replace("/((<[^\x40'>]*)|$kw)/ie"'"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"'$DateiEcho); 
Bringt aber nichts, in einem anderen Forum hat mir jemand die Zeile aufeschlüsselt:

PHP-Code:
$ChgDatei preg_replace(
//sollte soweit klar sein.. 

"
//beginnt den suchstring

/
//sogenannter delimiter.. beginnt den regulären ausdruck


((<[^>]*)|$kw)
//finde alle zeichenfolgen, die als erstes zeichen < haben
gefolgt von beliebig vielen zeichen, die nicht > sind oder aber die genau $kw entsprechen

/
//schließender delimiter beendet den regulären ausdruck
i
//unterscheide nicht zwischen groß- und kleinschreibung
e
//sorge dafür, dass backreferences im ersatzstring evaluiert werden. Damit ist ein ersetzen von PHP-Code vor der ausführung des codes möglich. die rückgabe ist dann das ergebnis der execution

"
//ende des suchstring

'

"\2"=="\1"? "\1":"<span class=\"error\">\1</span>"
// hier wird es spannend... denn hier kommt das e ins spiel.. wenn zweiter match == erster match, schreibe erster match, sonst schreibe <span class blablubber error>erster match</span>

'
$DateiEcho
//mach das ganze mit dem Inhalt von $DateiEcho


); 
Ich kapiere aber nicht, wie dann nur außerhalb von Tags gesucht und ersetzt werden kann!
PHP-Code:
((<[^>]*)|$kw)
//finde alle zeichenfolgen, die als erstes zeichen < haben
//gefolgt von beliebig vielen zeichen, die nicht > sind oder aber die genau $kw entsprechen 
Denn so gesehen, würde ja nur > nicht gefunden werden oder?!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 27.10.2006, 14:53  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

ja aber es wird quasi <xyz parameter ="bla" mit sich selbst verglichen (\1==\2) und bei Übereinstimmung mit sich selbst zurückersetzt "\1". reguläre Ausdrücke sind so gierig, daß sie alles bis zum schließenden > an sich reißen.
das meinte ich mit sich selbst ersetzen. das Keyword selbst wird dagegen nicht geklammert und deshalb gibts \2 nicht und der Vergleich ergibt stets null.
vielleicht würde es etwa so funktionieren (ungeprüft):
Code:
((<[^>]*)|(\([^\)]*)|$kw)
nikosch ist offline  
Alt 27.10.2006, 15:10  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Ne funktioniert leider nicht, ich bin echt am verzweifeln!!!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 27.10.2006, 15:21  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

korrektur:
Code:
/((<[^>]*|\([^\)]*)|$kw)/ies
funktioniert bei mir, bin aber nicht sicher ob ich genau verstanden habe was genau du möchtest.
nikosch ist offline  
Alt 27.10.2006, 15:39  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Auch nicht, leider, aber Danke!

Oben die ersten beiden Beiträge von mir, da steht mein Problem beschrieben. Da ich das Problem des ersten Beitrags lösen konnte, indem ich ein ' in die Gruppe einfüge ergaben sich aber andere Probleme.
Wenn beim Ersetzen nicht escaped werden würde, ohne das sich dann neue Probleme ergeben,das wäre mein Ziel!

Es darf also nicht vor einem ' ein \ beim ersetzen gesetzt werden!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 27.10.2006, 17:47  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

jetzt hab ich dein problem geschnallt. außer warum du die (...) sachen nicht finden möchtest. schlechte nachrichten:
Zitat:
e
Wenn dieser Modifikator gesetzt ist, macht preg_replace() in der Ersetzungszeichenkette eine normale Ersetzung von Rückrefenzen, wertet sie als PHP-Code aus und verwendet das Ergebnis um damit die gesuchte Zeichenkette zu ersetzen. Einfache und doppelte Anführungszeichen werden in den ersetzten Rückreferenzen mit einem Backslash maskiert.
mußt du also nachträglich die \' zu ' umwandeln schätze ich.
nikosch ist offline  
 


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
[Erledigt] HTML Mail mit Lücken mitten in den Worten, wie kommt das? DeeFour PHP-Fortgeschrittene 2 29.05.2008 15:47
Variable und komplette HTML Datei chrisonline PHP Tipps 2007 3 24.05.2007 15:30
pseudo-code mit echtem html ersetzen Dilandau PHP Tipps 2006 7 03.07.2006 21:46
&amp;amp;amp;lt;if&amp;amp;amp;gt; &amp;amp;amp;lt;/if&amp;amp;amp;gt; in einer HTML Datei fuer Templ PHP-Fortgeschrittene 6 03.11.2005 12:05
Kontaktformular, welches auf neue html Seite führt PHP Tipps 2005-2 4 20.07.2005 11:21
html Quelltext Leerzeichen per Zufall ersetzen PHP Tipps 2005-2 13 30.06.2005 21:08
html erregi? PHP Tipps 2005 9 16.02.2005 23:39
HTML Tabellenzeile in Tabelle einfügen? Datenbanken 2 28.01.2005 00:28
Variable in HTML ersetzen ohne "<? echo $var; ?>& PHP Tipps 2004-2 6 15.12.2004 21:27
IMAP: Bild(er) in HTML Part richtig darstellen PHP-Fortgeschrittene 1 07.10.2004 12:21
{$varname.optelement} mit preg_match aus HTML extrahieren PHP Tipps 2004 0 11.09.2004 04:13
Unterschied HTML und PHP PHP Tipps 2004 4 28.08.2004 19:02
Validitor (HTML 4.01) = Schwachsinn? Filewalker Off-Topic Diskussionen 19 03.08.2004 15:27
Reguläre Ausdrücke beim suchen und ersetzen Off-Topic Diskussionen 5 05.07.2004 15:35
[Erledigt] PDF aus HTML erzeugen ? PHP-Fortgeschrittene 2 05.06.2004 02:10

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
js suchen ersetzen, leerzeichen ausserhalb von tags ersetzen, php backslash ersetzen mit raute, \\\2\==\\\1\? \\\1\: javascript, php preg_replace raute zeichen, code außerhalb von html, javascript escape in tags replace, preg_replace backslash außerhalb von html tags ersetzen, php alle \doppelten buchstaben\ ersetzen, nur auserhalb von tags ersetzen, javascript html tag suchen und ersetzen, php html ausgabepuffer, js html escape, php sonderzeichen außerhalb html ersetzen, inhalt der dateien suchen und ersetzen, php suchwort ersetzen, suchstring ausserhalb von html tags markieren, javascript quelltext suchen ersetzen, javascript suchen in htmlseite nach doppelten buchstaben, preg_replace codesuche

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:23 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.