Portal > Foren > PHP > PHP-Programmierung > preg_replace()-Aufrufe minimieren
Antwort
 
Themen-Optionen Thema durchsuchen
Alt 06.06.2007, 16:47 Nach oben    #1
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard 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?
__________________
http://www.ChrisDiary.De

Geändert von Ben (06.06.2007 um 16:58 Uhr)
Chr!s ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2007, 17:16 Nach oben    #2
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 597
Standard

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)
CIX88 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2007, 18:04 Nach oben    #3
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

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


Artemis ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2007, 18:40 Nach oben    #4
Ben
Benjamin Klaile
 
Benutzerbild von Ben
 
Registriert seit: 02.12.2004
Ort: Remagen
Beiträge: 4.516
Standard

Ich denke mal, damit hat sich die "Minimierung" erledigt
Ben ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2007, 18:51 Nach oben    #5
Erfahrener Benutzer
 
Registriert seit: 18.03.2005
Beiträge: 597
Standard

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.
CIX88 ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.06.2007, 21:25 Nach oben    #6
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

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)
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.06.2007, 12:06 Nach oben    #7
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

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.
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Programm öffnen und minimieren! la-finest Sonstige Programmiersprachen 1 22.01.2007 09:45
Minimieren auf Taskbar $traight-$hoota Allgemeine Java-Programmierung 6 24.10.2005 22:09


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45