• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Ersetzungen in der URL

Tronjer

Senior HTML'ler
Ich muss am Montag eine Site mit verlinkten Bildern erstellen, bei der je nach Grafik auf weitere Seiten mit unterschiedlichen background-images weitergeleitet wird. Da der Code bei uns im Intranet liegt, kann ich das hier nur vereinfacht simulieren.

Gegeben sei eine index.php mit zwei Bildern, nennen wir sie male.jpg und female.jpg. Den Links hänge ich entsprechende Parameter an.

HTML:
<!DOCTYPE html>
<html>
<head>
    <title>foobar</title>
    <style type="text/css">
</head>
<body>
    <div id="pictures">
        <a href="page_2.php?g=m"><img src="http://www.html.de/images/male.jpg" alt="" /></a>
        <a href="page_2.php?g=w"><img src="http://www.html.de/images/female.jpg" alt="" /></a>
    </div>
</body>
</html>

Auf der folgenden Seite lese ich die Parameter aus und weise das jeweilige background-image zu.
HTML:
<?php 
    if ($_GET['g'] == 'm') {
        $class = 'male';
    } else  {
        $class = 'female';
    }
?>
<!DOCTYPE html>
<html>
<head>
    <title>foobar 2</title>
    <style type="text/css">
        .male {
            background: url("http://www.html.de/images/male.jpg");
        }
        .female {
            background: url("http://www.html.de/images/female.jpg");
        }
    </style>
</head>
<body>
    <div class="<?php echo $class; ?>"></div>
</body>
</html>

Problem ist allerdings, dass ich statische Verlinkungen à la page_2.php?g=m nicht schreiben darf, weil wir für Weiterleitungen entsprechende Klassen und Methoden verwenden. Außerdem kann es durchaus sein, dass vor dem g=m bereits andere Parameter übergeben wurden. Ich müsste also erst einmal die URL nach Parametern abfragen und meinen am Ende anhängen. Wäre das so richtig? Ich blicke das heute nicht mehr. :(

PHP:
<?php if(strpos($_SERVER['REQUEST_URI'], '?') == true) {
        $url = $_SERVER['REQUEST_URI'] . $_GET['g'];
        return $url;
     } ?>
 
Hm, ich würde einfach den Werte von der vodefinierten _SERVER-Query_String Variable im Hypertext Reference Attribut anhängen.

PHP:
<a href="page_2.php?g=m<?php echo (isset($_SERVER['QUERY_STRING'])) ? '&amp;' . htmlspecialchars($_SERVER['QUERY_STRING']) : ''; ?>"><img src="http://www.html.de/images/male.jpg" alt="" /></a> 
<a href="page_2.php?g=w<?php echo (isset($_SERVER['QUERY_STRING'])) ? '&amp;' . htmlspecialchars($_SERVER['QUERY_STRING']) : ''; ?>"><img src="http://www.html.de/images/female.jpg" alt="" /></a>
 
Die Reihenfolge der Parameter ist doch egal, nur der Name ist von Bedeutung. Musst ihn nur 1x mit ? anhängen (wenn es der erste und einzige ist) oder mit &, wenn es schon andere gab.
 
Musst ihn nur 1x mit ? anhängen (wenn es der erste und einzige ist) oder mit &, wenn es schon andere gab.

Jup, genau darüber hatte ich mir den Kopf zerbrochen. Dachte, ich müsste hier noch ein str_replace() einbauen, und überdies werden Weiterleitungen bei uns mit $Object->methode realisiert. Das war dann etwas zu viel heute morgen um 1 Uhr.

Ich habe es mal mit $_SERVER['QUERY_STRING'] umgeschrieben.

HTML:
<?php $p = isset($_SERVER['QUERY_STRING']) ? '&' : '?'; ?>

<!DOCTYPE html>
<html>
<head>
    <title>foobar</title>
</head>
<body>
    <div id="pictures">
        <a href="<?php $Object->methode . $p; ?>g=m"><img src="http://www.html.de/images/male.jpg" alt="" /></a>
        <a href="<?php $Object->methode . $p; ?>g=w"><img src="http://www.html.de/images/female.jpg" alt="" /></a>
    </div>
</body>
</html>
 
Das könnte/sollte übrigens alles die entsprechende Objektmethode managen.

Nicht maximal durchdacht:

PHP:
<?php

class Foo
{
    public function bar($path, array $params, $reset = false)
    {
        $url = $path;

        if ($reset === false) {
            $params = array_merge($_GET, $params);
        }

        if (count($params) > 0) {
            $url .= '?' . http_build_query($params, '', '&amp;');
        }

        return $url;
    }
}


$foo = new Foo();

$_GET = array(
    'test' => 'äöü 123',
    'blub' => 'blub aus GET'
);

$params = array(
    'bla'  => 'Hallo & <Welt> ?',
    'blub' => 'blub aus $params'
);

var_dump($foo->bar('index.php', $params, false));
var_dump($foo->bar('index.php', $params, true));

Code:
string(98) "index.php?test=%C3%A4%C3%B6%C3%BC+123&amp;blub=blub+aus+%24params&amp;bla=Hallo+%26+%3CWelt%3E+%3F"
string(66) "index.php?bla=Hallo+%26+%3CWelt%3E+%3F&amp;blub=blub+aus+%24params"

Wenn $reset auf false steht, werden neue Parameter zu bestehenden GET-Parametern hinzugefügt (und überschreiben diese bei Bedarf). Ansonsten werden bestehende GET-Parameter ignoriert.
 
Zurück
Oben