 |
06.06.2007, 16:47
| Nach oben
#1 | | Christian Mühlroth
Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
| preg_replace()-Aufrufe minimieren Dieser Beitrag schloss sich an dieses Thema an, ist aber in einem eigenen Thread besser aufgehoben.
Ben.
------
Nun gut, eine Frage hätte ich noch, die denke ich zwar nicht wirklich zum Thema hier passt, aber ich wollte auch keinen neuen Thread aufmachen.
Ich habe folgende Funktion hier: PHP-Code: <?php
/**
* Converts an URI into a seo-friendly URI.
*
* @param string $sURI
* @return string
*/
public static function convertSeoFriendly($sURI) {
// Create an array with all replacements
$aReplace = array(
'Ü' => 'Ue',
'ü' => 'ue',
'Ö' => 'Oe',
'ö' => 'oe',
'Ä' => 'Ae',
'ä' => 'ae',
'ß' => 'ss',
'&' => 'und',
'\'' => '',
'"' => '',
'´' => '',
'`' => '',
);
// Replace all the array values
$sURI = str_replace(array_keys($aReplace), array_values($aReplace), $sURI);
// Replace one or more spaces with a "-"
// Replace everything else which is not valid with a "-"
$sURI = preg_replace('#(\s{1,})|([^a-z0-9\-])#im', '-', $sURI);
// Replace 2 or more "-" with only one "-"
$sURI = preg_replace('#-{2,}#m', '-', $sURI);
// Replace "-" at the end and at the beginning (if available)
$sURI = preg_replace('#(^-{1,})#m', '', $sURI);
$sURI = preg_replace('#(-{1,}$)#m', '', $sURI);
// Make the URI completely lowercased
$sURI = strtolower($sURI);
// Return the new URI
return $sURI;
}
?> Wie man schon sieht, soll diese Fukntion normale URIs (könnte ja beispielsweise der Titel eines Blog-Eintrags sein) in Suchmaschinenfreundliche URIs umwandeln. Funktionieren tut das, aber es sind mir ein bisschen viele preg_* Aufrufe.
Kennt jemand eine bessere, perfomantere Möglichkeit, oder habe ich sogar was vergessen?
Geändert von Ben (06.06.2007 um 16:58 Uhr)
|
| |
06.06.2007, 17:16
| Nach oben
#2 | | Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 597
| Zitat:
// Replace "-" at the end and at the beginning (if available)
$sURI = preg_replace('#(^-{1,})#m', '', $sURI);
$sURI = preg_replace('#(-{1,}$)#m', '', $sURI);
| Müsste das selbe wie $sURI = trim($sURI, '-'); sein.
EDIT: Zitat: |
$sURI = preg_replace('#(\s{1,})|([^a-z0-9\-])#im', '-', $sURI);
| Hier bevorzuge ich einen anderen Weg:
$sURI = preg_replace('~[^\w\-\+]~','', $sURI);
Geändert von CIX88 (06.06.2007 um 17:19 Uhr)
|
| |
06.06.2007, 18:04
| Nach oben
#3 | | Jonas
Registriert seit: 03.06.2006
Beiträge: 244
| PHP-Code: $sURI = preg_replace('#(\s{1,})|([^a-z0-9\-])#im', '-', $sURI); $sURI = preg_replace('#-{2,}#m', '-', $sURI);
Kann man zusammenfassen un optimieren/ändern als: Code: #-*(\s+|[^a-z0-9\-]+)-*#im
Zusammen ist das dann: PHP-Code: $sURI = str_replace(array_keys($aReplace), array_values($aReplace), $sURI);
$sURI = preg_replace('#-*(\s+|[^a-z0-9\-]+)-*#im', '-', $sURI);
$sUri = trim($sUri, '-');
Übrig ist ein preg_replace.
__________________ Applikations-Programmierung:
BlitzMax, BlitzPlus Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL |
| |
06.06.2007, 18:40
| Nach oben
#4 | | Benjamin Klaile
Registriert seit: 02.12.2004 Ort: Remagen
Beiträge: 4.516
|
Ich denke mal, damit hat sich die "Minimierung" erledigt |
| |
06.06.2007, 18:51
| Nach oben
#5 | | Erfahrener Benutzer
Registriert seit: 18.03.2005
Beiträge: 597
|
Naja wenn man aus a-z0-9 ein \w macht, kann man sich den Modifer i auch noch sparen.
Für den Modifer m sehe ich allerdings keinen Sinn.
|
| |
06.06.2007, 21:25
| Nach oben
#6 | | Bastian Fenske
Registriert seit: 04.01.2006 Ort: Kassel
Beiträge: 853
|
Müsste das nicht auch so gehen: PHP-Code: <?php
$sURI = str_replace(array_keys($aReplace), array_values($aReplace), $sURI); $sURI = strtolower($sURI); $sURI = preg_replace('#([^a-z0-9]+)#', '-', $sURI); $sUri = trim($sUri, '-'); Das strtolower() macht sich vor einem (dann notwendigerweise case insensitiven) preg_replace() sicherlich besser, Leerzeichen brauchst du ja nicht extra aufführen, da sie in der Menge ^a-z0-9 ja enthalten sind und den Bindestrich - keine Ahnung, was da schneller ist - ihn drinnen zu lassen oder rauszunehmen (sind ja aber eh absolut irrelevante Werte). Und, ja im multiline modifier sehe ich auch keinen Sinn.
Basti
PS:
Nicht-ASCII-Zeichen im Quellcode sind übrigens nicht ganz ungefährlich und natürlich missverständlich.
Geändert von Basti (06.06.2007 um 21:28 Uhr)
|
| |
07.06.2007, 12:06
| Nach oben
#7 | | Christian Mühlroth
Registriert seit: 04.09.2005 Ort: Nürnberg
Beiträge: 561
|
So, danke, ich hab mal die Version von Basti genommen, dass strtolower() vor der preg-Funktion anzuwenden ist sicher ganz geschickt.
Der Modifier m hat hier allerdings nichts zu suchen, ich weiß aber ehrlichgesagt auch nicht, was ich mir dabei gedacht hab. |
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | | | Themen-Optionen | Thema durchsuchen | | | |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.
|