# Zeichen in einem String ersetzen mit Regex für URL bei seo



## nightryu (8. Dezember 2007)

Hallo, und Guten Morgen (Gute Nacht hört sich als Begrüssung komisch an  )

Ich habe folgendes Problem... ich wollte bei meiner seite einiges ändern und dazu zählt auch das URL-Format
das soll von zB domain.de/?serie=2&serienid=111 auf das Format domain.de/serien/serientitel
, alles schön gut und das meiste auch nicht das problem weil ich das schonmal durch hatte aber aufgegeben habe... nun wollt ich nen neuen anlauf machen... brauche aber mal hilfe bei folgendem, ich möchte mir ne funktion schreiben
in der der übergebene string von allen nicht in URLs nutzbaren Zeichen und anderen Sonderzeichen wie komma und so bereinigt werden, bzw, diese Zeichen durch einen Joker oder so ersetzt werden wie zB "_" oder so.
Hatte damals was mit regex gebastelt.. kann es aber nirgends mehr finden...
sollte ungefähr so aussehn:


```
function string4seo($string){
 ~~
}
#######################
$text = "Blue Drop: Tenshi-tachi no Gikyoku";
$ausgabe = string4seo($text);
// Ausgabe : "blue_drop_tenshi_tachi_no_gikyoku"
```


ich hoffe ihr könnt mir dabei helfen... ich bin da derzeit irgendwie am verzweifeln...


----------



## Sven Mintel (8. Dezember 2007)

```
function string4seo($string){
return strtolower(preg_replace('|\W|','_',$string));
}
```


----------



## Gumbo (8. Dezember 2007)

Es sollte keine aufeinanderfolgende Unterstriche geben. Deshalb:
	
	
	



```
function string4seo($string)
{
	return strtolower(preg_replace('/\W+/', '_', $string));
}
```


----------



## nightryu (8. Dezember 2007)

super, vielen dank schonmal, könnt ihr mir sagen wofür das \W im regex steht?


----------



## drucko (8. Dezember 2007)

http://de2.php.net/manual/de/reference.pcre.pattern.syntax.php
\W beschreibt einen "non-word"-Character


> by php.net
> A "word" character is any letter or digit or the underscore character, that is, any character which can be part of a Perl "word".


----------



## nightryu (8. Dezember 2007)

Vielen Dank und Repsekt für die so schnelle HIlfe 
Ich kann mcih garnich oft genug bedanken ^_^

eine kleine Frage noch, wenn ich jetzt dadurch etwas herausbekomme, wo der string zB mit einem Punkt anfing, ersetzt er diesen ja auch mit "_"
zB wird ja aus 

".hack//ROOTS 2.0" ganz einfach "_hack_roots_2_0"
der 'schönheit' halber wärs gut wenn ich vorher noch anführende oder endende _ direkt aus dem String herausfiltern kann.. wie tue ich das?^^


----------



## Gumbo (8. Dezember 2007)

```
function string4seo($string)
{
	return strtolower(preg_replace('/(?:^_+|_+$)/', '', preg_replace('/\W+/', '_', $string)));
}
```


----------



## nightryu (8. Dezember 2007)

das ist toll, so gehts schon richtig gut und ich lern dazu  ^__^
mir ist gerade auch noch aufgefallen, dass er ö/ü/ä/ß nicht ersetzt
ich hab jetzt mal so gelöst:

```
$string = preg_replace('/ö/','oe',$string);
	$string = preg_replace('/ä/','ae',$string);
	$string = preg_replace('/ü/','ue',$string);
	$string = preg_replace('/ß/','sz',$string);
```

mich würde interessieren, bzw bin ich mir sicher, dass dies bestimmt auch eleganter geht, das wäre dann denke ich auch der letzte schritt


----------



## R00Ki3 (7. Januar 2008)

für dein zuletzt aufgeführtes kannst du genau so gut die funktion str_replace nutzen...

```
$search=array("ö", "Ö", "ü", "Ü", "ä", "Ä", "ß");
$replace=array("oe", "Oe", "ue", "Ue","ae", "Ae", "sz");
$string = str_replace($search, $replace, $string);
```


----------

