• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

Ändern der URL per PHP?!

Registriert
16.04.10
Beiträge
25
Hallo ich hoffe ihr könnt mir helfen.
Ich habe als Projekt ein Wiki System aufgegeben bekommen und bin soweit auch durch. Lediglich der Sprachwechsel fehlt noch.

Ziel ist es per Klick auf ein Icon (Flagge z.B.) einen Sprachwechsel durchzuführen. Das Ganze ist sehr einfach gehalten, denn auf dem Apache laufen 2 verschiedene Versionen wo die Sprache schon verstellt ist. Das heißt das PHP Skript muss im Prinzip nur einen Teil der URL tauschen:

Aussehen müsste es dann so:

../wiki/deu/beispielthema/aritkel1

../wiki/enu/beispielthema/artikel1

Ich hoffe es ist ersichtlich was ich vorhabe. Große PHP-Kenntnisse habe ich leider noch keine.

Vielen Dank im Voraus!
 

knalli

Stechapfel
Registriert
19.01.10
Beiträge
159
Mir ist zwar nicht klar, warum du jetzt ein eigenes Wiki entwickelt hast.. aber nun denn: Du nutzt eine Regex in deiner .htaccess, die die entsprechenden Parameter an dein PHP-Script weiterreicht. Sowas ähnliches hast du doch eh schon für den "Rest" gemacht, wo ist da der Unterschied bei der Sprachauswahl?
 

Skagen

Fuji
Registriert
02.02.07
Beiträge
38
Mir ist zwar nicht klar, warum du jetzt ein eigenes Wiki entwickelt hast.. aber nun denn: Du nutzt eine Regex in deiner .htaccess, die die entsprechenden Parameter an dein PHP-Script weiterreicht. Sowas ähnliches hast du doch eh schon für den "Rest" gemacht, wo ist da der Unterschied bei der Sprachauswahl?
Na, er will doch nur zwischen zwei Ordnern switchen. Dann reicht auch sowas:

In die deutsche Version einsetzen:
Code:
<?
$link = str_replace("/wiki/deu/","/wiki/enu/",$_SERVER['PHP_SELF']);
echo '<a href="'.$link.'">zur englischen Version</a>';
?>
In die englische Version einsetzen:
Code:
<?
$link = str_replace("/wiki/enu/","/wiki/deu/",$_SERVER['PHP_SELF']);
echo '<a href="'.$link.'">zur deutschen Version</a>';
?>
 

knalli

Stechapfel
Registriert
19.01.10
Beiträge
159
Achso. Das habe ich falsch verstanden.

Das Suchen und Ersetzen kann aber bei URLs schieflaufen, falls die im Titel oder weiteren Pfad genau diese Kombination haben. Um das Thema komplett auszuschließen, komme ich wieder mit den regulären Ausdrücken.

Code:
<?

/** Returns link with specified language. */
function changeLanguage($link, $language) {
	$pattern = "/(\/wiki\/)([a-z]+)(\/.*)/";
	// mit $pattern = "/^(\/wiki\/)([a-z]+)(\/.*)/"; werden keine absoluten Links mit http und Domain erlaubt.
	return preg_replace($pattern, sprintf('$1%s$3', $language), $link);
}

$link1a = '/wiki/deu/MeineSeiteMitTitel/wiki/deu/s';
$link2a = 'http://example.net/wiki/deu/MeineSeiteMitTitel/wiki/eng/s';

$link1b = changeLanguage($link1a, 'eng');
$link2b = changeLanguage($link2a, 'eng');

echo "Link1 (vorher): " . $link1a . "\n";
echo "Link1 (nachher): " . $link1b . "\n";
echo "Link2 (vorher): " . $link2a . "\n";
echo "Link2 (nachher): " . $link2b . "\n";
?>

Code:
PhpMate r11069 running PHP 5.3.3 (cli) (/usr/bin/php)
>>> t.php

Link1 (vorher): /wiki/deu/MeineSeiteMitTitel/wiki/deu/s
Link1 (nachher): /wiki/eng/MeineSeiteMitTitel/wiki/deu/s
Link2 (vorher): http://example.net/wiki/deu/MeineSeiteMitTitel/wiki/eng/s
Link2 (nachher): http://example.net/wiki/eng/MeineSeiteMitTitel/wiki/eng/s
 

Skagen

Fuji
Registriert
02.02.07
Beiträge
38
Das Suchen und Ersetzen kann aber bei URLs schieflaufen, falls die im Titel oder weiteren Pfad genau diese Kombination haben. Um das Thema komplett auszuschließen, komme ich wieder mit den regulären Ausdrücken.
Hmm, ja stimmt. Mein Beispiel klappt zuverlässig, wenn der Aufbau denn tatsächlich so ist:

http://www.domain.xy/wiki/deu/...
http://www.domain.xy/wiki/eng/...

Dann kann man die komplette URL bis "/eng/" bzw. "/deu/" ersetzen.
Oder nur beim zum ersten Vorkommen von "/eng/" , "/deu/" ersetzen, das wäre sogar noch besser.

Du siehst, ich mag keine regulären Ausdrücke ;) - aber manchmal gehts auch nicht ohne.
Sei es drum, Broken Vow hats vermutlich eh schon irgendwie gelöst...

Grüße,
Skagen