PHP preg_replace umlaute entfernen

lordfritte

Lieutenant
Registriert
Juli 2006
Beiträge
964
Hallo ich habe ein kleines Problem, ich habe eine funktion welche mir web-komforme URL's erzeugen soll, sprich alle umlaute und ungültigen Zeichen sollen rausgeworfen werden:

PHP:
function getFriendlyUrl($url, $removeUnderscore=false) {
	if(mb_detect_encoding($url) == "UTF-8") {
		$url = utf8_decode($url);
	}
	$url = trim($url);
	$url = strtolower($url);
	$url = str_replace("ü", "ue", $url);
	$url = str_replace("ä", "ae", $url);
	$url = str_replace("ö", "oe", $url);
	$url = str_replace("ß", "ss", $url);
	$url = str_replace(' ', '_', $url);
	$url = preg_replace('/[_]{2,}/','_', $url);
	$url = preg_replace("[^A-Za-z0-9_-]", "", $url);
	return $url;
}

Das Problem: Solche Zeichen, z.b. "\xC4", bleiben trotzdem drin, hat jemand eien Idee warum?
 
Was genau hast du denn mit den URLs vor? Sofern diese "nur" aufgerufen werden sollen, würde ich mod_rewrite (apache) nehmen für solche Aufgaben.
 
Also ich hole keywords und daraus werden dann url's für landingpages generiert. Die url‘s werden in einer Datenbank gespeichert.
Aufruf ist z.b. keyword.domain.de, oder(das wird z.b. mit rewite gemacht): www.domain.de/?l=keyword und nach keyword wird anschließend in der Datenbankgesucht und der passende Kontent angezeigt.
Und das ist eben das Problem, z.b. das \xC4.

Bei einem Mysql Insert wird dadurch ein Error geworfen: PDOException' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xC4theri...' for column 'friendly_url' at row 1'

Aber alles was in die friendly_url geht geht erst durch die Funktion getFriendlyUrl, welche eigentlich richtig funktioniert, nur eben diese Backslash-Zeichen nicht.
 
Terminatoren bei der RegEx vergessen (ich benutze dafür immer /):
Code:
$url = preg_replace("/[^A-Za-z0-9_-]/", "", $url);
 
Zurück
Oben