mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 20.04.2024 04:26 Benutzername: Passwort: Auto-Login

Thema: PHP-Funktion zum erstellen von SEO-freundliches URLs vom 25.06.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP-Funktion zum erstellen von SEO-freundliches URLs
Autor Nachricht
grafzahl
Threadersteller

Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
Geschlecht: Männlich
Verfasst Mo 25.06.2007 18:01
Titel

PHP-Funktion zum erstellen von SEO-freundliches URLs

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Mo 25.06.2007 19:17
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
grafzahl
Threadersteller

Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
Geschlecht: Männlich
Verfasst Di 26.06.2007 16:06
Titel

Antworten mit Zitat Zum Seitenanfang

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...
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Di 26.06.2007 18:43
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden
grafzahl
Threadersteller

Dabei seit: 13.04.2006
Ort: Magdeburg
Alter: 39
Geschlecht: Männlich
Verfasst Mi 27.06.2007 09:50
Titel

Antworten mit Zitat Zum Seitenanfang

Probiers mal aus, dann erkennt er die Sonderzeichen nicht mehr...wendet demnach auch nicht die "Manipulation" an.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
beeviZ

Dabei seit: 30.09.2002
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Mi 27.06.2007 12:47
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
 
Ä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 …
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


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.