URLs sicher umformen

DiDiJo

Erfahrenes Mitglied
Hi Leute,

ich hatte mir mal ne Funktion geschrieben, die mir meine Suchmaschinen-freundlichen Links erzeugt:
PHP:
function safeURL($string,$mit_endung = true) {
	if ($string != '') {
		$string = str_replace(".htm","",$string);
		
		$search = array("ä","ö","ü","ß"," ","%","&",".",",","?","!","_",":","/","`","´","#","§",'"');
		$replace = array("ae","oe","ue","ss","-");					
		$text = str_replace($search,$replace,$string);
		
		
		$text = preg_replace('/-{2,}/','-',$text); 
		if ($mit_endung) {
			$text .= '.htm';	
		}
		return strtolower($text);
	}
	return '';
}

Damit bin ich bis jetzt auch gut gefahren, aber scheinbar macht das jetzt Probleme wenn auf einmal Buchstaben mit einem Accent in der URL vorkommen (aufgrund der htaccess Anweisungen). Kann mir vlt. jemand helfen diese Funktion so umzuschreiben, dass der übergeben String nur noch aus Zahlen, normalen Buchstaben und Bindestrichen anstatt Leerzeichen besteht, bzw. die Sachen "intelligent" umformt.

In meinem Bespiel müsste aus:
"Allées des Châteaux" folgendes werden: "Allees-des-Chateaux.htm".

Vlt hat ja jemand von euch eine Idee wie man sowas schnell und einfach machen könnte.

mfg

DiDi
 
habe ich probiert. da kam bei mir folgendes raus:
/all?es-des-ch?teaux-berlin/001-001.htm und in meiner htacces steht folgendes:

RewriteRule homepages/kunden/[0-9]+/[a-zA-Z\-]+\/([a-zA-Z0-9\-]+).htm$ /details.php?objektnr_extern=$1 [L]

Der Teil "[a-zA-Z\-]+\" gibt den Seitennamen an. Die Nummer dahinter ist dann eine Objektnummer. Aber durch diese "?" greift meine htaccess Anweisung nicht mehr und ich lande auf der 404 Seite.
 
ok das mit dem utf8 war auf jeden Fall ein Problem ... aber jetzt mal kurz zum Verständnis: Wenn ich diese URL per urlencode umforme und ich plötzlich nen Wust an %, Zahlen und + Zeichen habe ist das doch bei weitem nicht so "SEO-freundlich" als wenn ich nur noch Buchstaben in der Adresse habe
 
Mal von SEO abgesehen: Was willst du einem User erklären, der aufgrund der nicht encodeten Chars deine Seite nicht anschauen kann? Nicht alle Browser unterstützen alle Zeichen. Die encodeten können aber alle, IMHO. Wie du schon selbst geschrieben hast, kann alles, was nicht zugeordnet werden kann, nicht weitergeleitet werden > 404.
 
Ich mache es so, dass ich ganz am Ende, nach dem ich die Zeichen ersetzt habe, für die ich eine sinnvollen Ersatz habe (ä->ae etc.) mit einem regulären Ausdruck nochmal alles raus werfe, was übrig ist. Du musst den Ausdruck noch an deine Bedürfnisse anpassen.

PHP:
$text = strtolower($text);
return preg_replace('/[^a-z0-9_-]/', '', $text);
 
Zurück