Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
grafzahl
Threadersteller
Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
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"
Bisher hab ich folgende Funktion dazu gebastelt:
Code: |
function _getStringAsURL($string) {
$string = strtolower($string);
$patterns = array("%","euro","ae","ue","oe","Ae","Ue","Oe","ss","-","" ,"" ,"_","" ,"" ,"" ,"_","-","-" ,"-" );
$replace = array("prozent","€","ä" ,"ü" ,"ö" ,"Ä" ,"Ü" ,"Ö" ,"ß"," ","'","\"","/","\?","´","`","&",",","\(","\)");
for ($i=0;$i<count($patterns);$i++) {
$string = ereg_replace($replace[$i],$patterns[$i],$string);
}
return $string;
}
|
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.
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
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...
OK. Aber egal. Versuch mal so:
Code: | <?php
function _getStringAsURL( $string )
{
$suche = array( "@", "%", "€","ä" ,"ü" ,"ö" ,"Ä" ,"Ü" ,"Ö" ,"ß"," ","'","\"","/","\?","´","`","&",",","\(","\)" );
$ersatz = array( "a", "prozent","euro","ae","ue","oe","Ae","Ue","Oe","ss","-","" ,"" ,"_","" ,"" ,"" ,"_","-","-" ,"-" );
return strtolower( str_replace( $suche, $ersatz, $string ) );
}
echo _getStringAsURL( "Deine Mütter saßen bei W@ld unterm 100€ Tisch" ); // deine-muetter-sassen-bei-wald-unterm-100euro-tisch
?> |
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.
Jetzt sollte eigentlich alles funktionieren.
|
|
|
|
|
Anzeige
|
|
|
grafzahl
Threadersteller
Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
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...
|
|
|
|
|
rob
Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht:
|
Verfasst Di 26.06.2007 18:43
Titel
|
|
|
Zitat: | Hättest du noch ne Idee wie man mit UTF-8 Zeichen umgehen müsste? |
Verstehe ich nicht so ganz...
Wie sollte man damit denn schon umgehen? Ganz normal...
Wo ist das Problem, wenn du UTF-8 als Codierung einsetzt?
|
|
|
|
|
grafzahl
Threadersteller
Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
Geschlecht:
|
Verfasst Mi 27.06.2007 09:50
Titel
|
|
|
Probiers mal aus, dann erkennt er die Sonderzeichen nicht mehr...wendet demnach auch nicht die "Manipulation" an.
|
|
|
|
|
beeviZ
Dabei seit: 30.09.2002
Ort: -
Alter: -
Geschlecht:
|
Verfasst Mi 27.06.2007 12:47
Titel
|
|
|
meine funktion dazu sieht so aus:
Code: |
function sanitize($string) {
$s = array('á','à','â','ä','Á','À','Â','Ä',
'é','è','ê','É','È','Ê',
'í','ì','î','Í','Ì','Î',
'ó','ò','ô','ö','Ó','Ò','Ô','Ö',
'ú','ù','û','ü','Ú','Ù','Û','Ü',
' ','–','—','…','’','%','&',' ','ß'
);
$r = array('a','a','a','ae','A','A','A','Ae',
'e','e','e','E','E','E',
'i','i','i','I','I','I',
'o','o','o','oe','O','O','O','Oe',
'u','u','u','ue','U','U','U','Ue',
'-','-','-','...','','','+','-','ss'
);
$string = str_replace($s,$r,$string);
$string = strtolower($string);
$string = preg_replace('/\s{1,}/sm','-',$string);
$string = preg_replace('/[^a-zA-Z0-9_.+ \]\[äöüÄÖÜ-]+/', '', $string);
return $string;
} |
ist allerdings erst version 0.6beta also noch nicht wirklich fertig und noch nich ganz sauber.
|
|
|
|
|
|
|
|
Ähnliche Themen |
pdf dokument mit bild upload funktion erstellen?
Online-Chat Funktion - mit On und Offline Funktion
4 urls 1 seite
Bilder URLs per var übergeben
htaccess urls optimieren
[ModRewrite] Suchmaschinenfreundliche URLs …
|
|
|
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.
|
|