URL auslesen und kürzen
konsument
- php
Hallo Welt,
ich möchte gerne folgendes realisieren, komme aber mit meinem sehr begrenzten PHP Wissen nicht weiter.
Ich habe folgende URL:
http://www.domain.de/eins/zwei/drei/vier/fuenf/
und möchte nach dem Auslesen die URL nur bis zu "drei" ausgeben, ganz egal was und wieviel dahintersteht - also:
http://www.domain.de/eins/zwei/drei/
Mein Gedanke dazu ist die Anzahl der Slashes in der Url auszulesen und quasi nach dem 6ten den String abzubrechen. Aber wie lese ich die "/" aus der Url aus? Mit substr kann ich doch eigentlich nur einen bestimmten Bereich eines Strings ausgeben und keine speziellen Zeichen oder?
Über Hilfe würde ich mich sehr freuen.
Hi,
Mein Gedanke dazu ist die Anzahl der Slashes in der Url auszulesen und quasi nach dem 6ten den String abzubrechen. Aber wie lese ich die "/" aus der Url aus?
Mit strpos kannst du das erste Auftauchen eines Zeichens in einer Zeichenkette finden, optional ab einem bestimmten Startposition.
Du koenntest also z.B. mehrfach hintereinander mit strpos den jeweils naechsten Slash finden lassen, immer von der Position des Vorhergehenden ausgehens. Anschliessend hast du dann eine Position, bis zu der du den String mit substr ausgeben kannst.
Ueberlege dir, wie du Sonderfaelle behandelst - bspw. den, dass der String gar keine sechs Slashes enthaelt, sondern weniger.
MfG ChrisB
Hellihello
Mit strpos kannst du das erste Auftauchen eines Zeichens in einer Zeichenkette finden, optional ab einem bestimmten Startposition.
Du koenntest also z.B. mehrfach hintereinander mit strpos den jeweils naechsten Slash finden lassen, immer von der Position des Vorhergehenden ausgehens. Anschliessend hast du dann eine Position, bis zu der du den String mit substr ausgeben kannst.
oder mit str_replace die domain abschneiden. den rest per explode ein ein array zerlegen. und dann die ersten drei zählen.
$request = "example.com/a/b/c/d/e/f"
$url = str_replace(array('example.com/','example.com'),"",$request);
$url_array = explode('/',$url);
if (count($url_array) > 3) {
$three_dir_path = '/'.$url_array[0].'/'.$url_array[1],'/'.$url_array[2]
} else {
$three_dir_path = $url;
}
echo $three_dir_path;
ungetestet.
Dank und Gruß,
Nochmals Hallo Welt,
ich habs nun doch hinbekommen. Hab ne Abfrage mit chr() gestartet. Klappt wunderbar.
Trotzdem Danke für die Hilfe!
och mann..klappt doch nich..
Moin.
och mann..klappt doch nich..
Versuch's doch mal mit frankx' Hinweis.
In ganz kleinen Schritten:
1. nutze explode()
, um die URL an den '/' zu trennen; als Limit solltest du 7 wählen
2. zähle die zurückgegebenen Elemente mit count()
; ist deren Zahl < 6 (je nach Anforderungen eventuell auch < 7), dann behandle diesen Fall entsprechend
3. lösche das letzte Element des von explode()
zurückgegebenen Arrays mit unset()
4. nutze implode()
, um das Array wieder in einen String umzuwandeln
Jetzt wieder du.
Christoph
Hellihello Christoph,
Jetzt wieder du.
Sorry, hatte Deine Anleitung erst zu spät gesehen, dann hätt ich nix "vorgesagt".
Dank und Gruß,
Danke für die Unterstützung.
Das er mir die URL an der richtigen Stelle abschneidet hab ich schon mal geschafft :)
Das Problem ist jetzt nur, dass ich die neue URL in ein formular "action" einbinden will. Nur das klappt das nicht so richtig:
$url = "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'];
$urlFrag = explode("/", $url, 7);
for ($i = 0; $i < 6; $i++) {
$newUrl = $urlFrag[$i] . "/";
if($i == 6){
break;
}
echo $newUrl;
}
echo "<form action='$newUrl' method='post'>";
echo "<input type='submit' name='$value' value='$value' />";
echo "</form>";
Wenn ich das Formular in die Schleife einbinde, dann wiederholt er mir das auch. Auserhalb der Schleife gibt er mir die Variable nicht richtig aus. Wie mache ich jetzt weiter?
echo $begrüßung;
Ich habe folgende URL:
http://www.domain.de/eins/zwei/drei/vier/fuenf/
Hast du nicht, denn domain.de gehört bestimmt nicht dir. Bitte benutze für Beispielangaben die dafür vorgesehenen Domains, dann gibt es auch keine ungewollten Kollisionen mit real existierenden.
und möchte nach dem Auslesen die URL nur bis zu "drei" ausgeben, ganz egal was und wieviel dahintersteht - also:
http://www.domain.de/eins/zwei/drei/
Es gibt auch noch einen funktionalen Ansatz, der sich sogar als Einzeiler notieren lässt. Wenn du immer alles nach dem sechsten / abschneiden willst, dann vereinzle die Teile mit explode() am /, nimm mit array_slice() davon 6 Teile, füge diese mit implode() und einem / zusammen und häng noch einen weiteren / ans Ergebnis.
echo "$verabschiedung $name";