Dabei seit: 13.04.2006 Ort: Magdeburg Alter: 27 Geschlecht:
Verfasst Mo 25.06.2007 18:01 Titel
PHP-Funktion zum erstellen von SEO-freundliches URLs
Hi Leute,
ich bin nun schon ein paar Stunden am probieren, doch leider will es irgendwie nicht klappen.
Zu meinem Problem:
Ich habe einen String, z.B. "Deine Mütter saßen bei W@ld unterm 100€ Tisch", welchen ich wie z.B. in Foren oder Weblogsystemen in meine URL verbauen will. Dafür sollte der String natürlich von Umlauten und co. befreit werden.
Also in etwa so aussehen: "deine-muetter-sassen-bei-watld-unterm-100euro-tisch"
Dabei kommt derzeit allerdings folgendes raus: "deine-mütter-saßen-bei-w@ld-unterm-100€-tisch", also das lowercase greift, aber die Replaces noch nicht. Hat evtl. jemand schon eine passable Lösung dafür parat? Ich hab auch schon im Textpattern-Quelltext gewühlt, jedoch nichts gefunden.
Dabei seit: 11.12.2003 Ort: ~/ Alter: 35 Geschlecht:
Verfasst Mo 25.06.2007 19:17 Titel
Ich würde davon abraten, mit den alten ereg-Funktionen zu arbeiten.
Das sind die regulären Ausdrücke nach POSIX.
Arbeite lieber mit den Perl-kompatiblen regulären Ausdrücken (PCRE).
Die sind um einiges schneller.
Das heißt: Nimm nicht die ereg-Funktionen, sondern die preg-Funktionen.
In deinem Fall: preg_replace() statt ereg_replace().
Und immer wenn du eine Aufgabe auch einfach mit Stringfunktionen bewältigen kannst statt mit regulären Ausdrücken, dann solltest du auch die Stringfunktionen einsetzen. Die können gut und gerne 10mal schneller sein.
In deinem Fall könntest du gut mit str_replace() arbeiten.
Außerdem könntest du dir die Schleife sparen. Die ist überhaupt nicht notwendig.
Jetzt hast du aber noch ein Problem mit deinem strtolower().
Du wandelst erst deinen String in Kleinbuchstaben um und dann willst du noch eine Ersetzung von z.B. Ü in ue durchführen? Wie sollten denn dann noch die großen Umlaute dort enthalten sein?
So, aber jedenfalls könnte strtolower() ein Problem darstellen, je nachdem wie die Voreinstellung der Locale auf dem Server ist...
Sollte da "C" eingestellt sein, wird das mit der Umwandlung nichts...
Bei deiner Funktion hast du außerdem irgendwie was verdreht mit deinem Such- und deinem Ersatz-Array.
Solltest du wohl besser andersrum schreiben...
Ich hab's jetzt nicht getestet, aber ich schätze, daß es so funktionieren sollte.
Wenn du bei deinen Arrays keine Zeichen durcheinander gebracht hast, sollte es wohl laufen...
Das strtolower() wende ich jetzt erst ganz zum Schluß an. Ansonsten könnte es dir was durcheinander bringen.
Und deine Funktion ersetzt ja ohnehin die großen Umlaute durch Kleinbuchstaben.
Zum Schluß bleiben dann also keine Umlaute mehr und dann kann es selbst bei der Einstellung "C" für die Locale, keine Probleme mehr geben, weil die Umlaute ja schon weg sind.
Gab aber noch ein paar Problemchen mit deiner Funktion.
"prozent" und "%" hattest du in deinen Arrays vertauscht.
Und das @-Zeichen hast du nicht beachtet. Deinem Text kann man ja entnehmen, daß scheinbar "@" durch "a" ersetzt werden soll.
Das habe ich jetzt mal als ersten Wert in die Array gesteckt.
Dabei seit: 13.04.2006 Ort: Magdeburg Alter: 27 Geschlecht:
Verfasst Di 26.06.2007 16:06 Titel
Supi Dupi, wieder was dazu gelernt. Die Funktion scheint übrigens auch zu klappen.
Hättest du noch ne Idee wie man mit UTF-8 Zeichen umgehen müsste? Trifft zwar für das aktuelle Projekt nicht zu, aber wäre vielleicht für andere bzw. spätere Projekte ganz hilfreich...
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.