str_replace
Jojo55²
- php
0 Götz0 lulu0 Dieter Raber
Hallo liebe Leser
Ich habe folgendes Problem
Auf einer Seite steht folgender Code:
// Variablendeklaration und -initialisierung für URL
$URL = $_SERVER['QUERY_STRING'];
// Funktionen
$LINK = str_replace("order1=%&order2=", "order1=speed ASC&order2", $URL);
Die URL sieht ungefair so aus (man kanns nit genau sagen, da die später ja generiert wird ;) ) :
items.php?type=Schwere Kriegskunst&subtype1=Große Schlagwaffen&subtype2=Große Schlagwaffen&order1=itemname ASC&order2=levelreq1 DESC
Ich möchte, dass diese Funktion (oder wie man es nennen will) einfach ab "order1=" ALLES ersetzen, was bis "order2=" in $URL steht, es soll auch egal sein, was dazwischen stehen soll...
Ich weiß nur nicht, wie ich PHP das klar machen soll, dass es eben egal sein soll, was zwischen "order1=" und "&order2=" stehen soll.
Ich hoffe mal, dass das überhaupt geht ;)
Hallo Jojo55²!
$LINK = str_replace("order1=%&order2=", "order1=speed ASC&order2", $URL);
Das sieht verdächtig danach aus, daß aus dem Query-String direkt SQL-Abfragen generiert werden.
Falls dem wirklich so ist, solltest Du dringend dclp FAQ: 16.18. Wie kann ich bösartigen Code in SQL-Abfragen unterbinden? durchlesen.
Ich weiß nur nicht, wie ich PHP das klar machen soll, dass es eben egal sein soll, was zwischen "order1=" und "&order2=" stehen soll.
Mit Hilfe von Regulären Ausdrücken (siehe PHP Manual: XCIX. Regular Expression Functions (Perl-Compatible)) und der PHP-Funktion preg_replace() (siehe PHP Manual: preg_replace()) solltest Du es relativ einfach hinbekommen können.
MfG
Götz
Huhu Jojo
Ich weiß nur nicht, wie ich PHP das klar machen soll, dass es eben egal sein soll, was zwischen "order1=" und "&order2=" stehen soll.
Ich hoffe mal, dass das überhaupt geht ;)
Ja das geht, aber nicht mit str_replace().
Schau Dir mal preg_replace() an.
Evtl. ist für Deine Zwecke auch parse_str() nützlich.
Beschreib doch mal was Du eigentlich machen möchtest, ich vermute es soll der
aktuell gewählte Warenkorb, Menuepunkt oder Sortierkriterium per GET-Parameter weitergereicht werden.
Da bietet sich vielleicht ein anderer Lösungsansatz an.
Viele Grüße
lulu
Hallo Jojo55²,
$LINK = str_replace("order1=%&order2=", "order1=speed ASC&order2", $URL);
Mir fallen zwei Moeglichenkeiten ein, naemlich preg_replace() und das Exploden des Strings. Ich wuerde, glaube ich, letzteres machen.
$query_string = ?type=Schwere Kriegskunst&subtype1=Große Schlagwaffen.... //was fuer'n Zeug hast Du da nur drin...
Zu bemerken ist, dass dein $query_string offenbar nicht urlencoded ist, solltest du nachholen. Also von vorn:
$query_string = type=Schwere%20Kriegskunst&subtype1=Große%20Schlagwaffen....
$query_array = explode('&', $query_string);
das sieht jetzt so aus:
$query_array[0] = type=Schwere%20Kriegskunst;
$query_array[1] = subtype1=Große%20Schlagwaffen;
naechste Dimension geht so
$i = 0;
foreach($query_array as $value)
{
$tmp = explode('=', $query_array[0]);
unset($query_array[$i]);
$query_array[$i]['name'] = $tmp[0];
$query_array[$i]['wert'] = $tmp[1]
$i++
}
jetzt hast Du
$query_array[0]['name'] = 'type';
$query_array[0]['wert'] = 'Schwere%20Kriegskunst';
usw.
In dem Array kannst Du jetzt neu zuordnen wie du lustig bist, das Ergbnis wieder imploden und fertig.
Die Loesung mit preg_replace erscheint auf den ersten Blick einfacher, ich finde sie aber unflexibler. Aber zu dem Thema wird sich sicher noch jemand aeussern.
Gruß,
Dieter