Suchmusterproblem preg_replace() ersetzen von HTTP in HTTPS

  • Themenstarter Themenstarter Lukasz
  • Beginndatum Beginndatum
L

Lukasz

Hallo

Ich habe in mein neues Projekt meine Login Formulare und des weiteren wichtige spezifische Formulare dei persönliche Daten verarbeiten per SSL ausgelagert. Nun kann es sein, dass die ein und die selbe Seite sowohl über HTTP als auch über HTTPS abgerufen wird.

Leider gibt es da einen Haken, wenn man nicht 2 seperate Templates nutzen möchte, quittieren die Browser eine Warnmeldung, sofern Imagedateien über HTTP abgerufen werden und das Hauptdokument über SSL.

Damit ich von vorne herein diese Warnmeldungen seitens der Browser unterbinde, (da diese eine Bestätigung fordern und dies lästig ist) müsste ich von vorne herein hergehen, und alle bilddateien aufsuchen, und das http:// in https://um wandeln.

So bin ich hergangen und habe nun folgenden Code:
PHP:
//============================================================
//=               SSL URI WANDLUNG VON BILDERN               =
//============================================================
$url=parse_url($_SERVER["SCRIPT_URI"]);
if ($url["scheme"] == 'https') {
	$suchmuster = array(
		'/<img(.*)http(.*)>/siU',
		'/<table(.*)http(.*)>/siU',
		'/<td(.*)http(.*)>/siU',
	);
	$wandeln = array(
		'<img\\1https\\2',
		'<table\\1https\\2>',
		'<td\\1https\\2>',
	);
$ausgabe = preg_replace($suchmuster,$wandeln,$ausgabe);
}

Ich frage aslo ab, ob die Seite im SSL Status abgerufen wird, und wenn dies der Fall ist gehe ich her suche alle Bilder heraus und wandel das http in https um.

Leider bin ich nicht der Experte für Suchmuster. Und so habe ich folgendes Problem festgestellt:

- Der Parser ersetzt auch leider andere Tags wie <A HERF=... keine Ahnung warum, und das sollte nicht geschehen.
- Mein Suchmuster, ist noch nicht schlau genung, sodass wenn im Template https stehen sollte, er ein httpss daraus macht. Also hängt logischer weise ein weiteres s ran, und das weis ich auch nicht zu verhindern.

Wäre super wenn sich das einer mal ansehen könnte, und Rat hat!

Grüsse Lukasz!
 
Sobald etwas nach <td, <table oder <img steht und http enthaelt wird es gefunden.
Das schliesst auch Konstrukte wie
HTML:
<td><a href="http://www.kde.org">KDE</a></td>
ein.
Probier es doch einfach mal mit diesem Ausdruck:
Code:
<img.+src=(["']|)http://[./\w]+(["']|)>
 
Hallo Dennis

Erstmal recht herzlichen Dank!

Leider besteht immer noch das Problem, dass der Parser in der von dir angebotenen Variante die Url selbst verschlingt. Das http:// ersetzt er zwar, die Url aber bleibt auf der Strecke.

Da müsste denke ich also noch eine Arte Teilmarkierung rein. Denn der Parser ersetzt den gesamten bereich gerade wie folgt:

< img src="https://" weitere Eigenscahften wie alt="" etc...>
Alles was nach http:// und zwischen dem nächsten Eigenschaft kommt ist weg und läst sich nicht mittels \1 etc. einholen.

Grüsse Lukasz
 
Zuletzt bearbeitet von einem Moderator:
Der folgende Ausdruck sollte das komplette IMG-Tag erkennen.
Code:
<img.+src=(["']|)http://[./\w]+(["']|).*>
Getestet mit:
HTML:
<img src="http://bla.bla.bla/bla.bla">
<img src="http://bla.bla.bla/bla.bla" alt="bla">
<img alt="bla" src="http://bla.bla.bla/bla.bla">
 
Zurück