Martin_Online: Titel in Kleinbuchstaben umschreiben

Hallo,

ich versuche eine kleine Funktion zu schreiben die ein Titel umwandelt, derzeit habe ich es so

  
	function urlTitel ( $titel ) {  
		$i_vars = array(" ","Ä","Ö","Ü","ä","ö","ü","ß","?","/","-","é","è","é","&","&","´","´");  
		$o_vars = array("-","Ae","Oe","Ue","ae","oe","ue","ss","-","-","-","e","e","e","","","","");  
		  
		$titel = stripslashes($titel);  
		$titel = htmlspecialchars($titel);  
		  
		return $titel;  
	}  

klappt auch soweit, nur ich möchte dass aus einem T ein t wird usw.. muss ich jetzt JEDEN Buchstaben mit aufnehmen oder kann ich dieses einfacher haben?

  1. Ok, ich kann es wohl so machen

      
    $titel = strtolower ($titel);  
    
    

    Jetzt werden aber ÄÖÜ nicht mehr umgewandelt. Hmm was mache ich falsch?

    1. Sorry, hat sich erledigt, hab es nun so umgesetzt

        
      function urlTitel ( $titel ) {  
      $i_vars = array(" ","Ä","Ö","Ü","ä","ö","ü","ß","?","/","-","é","è","é","&","&","´","´");  
      $o_vars = array("-","ae","oe","ue","ae","oe","ue","ss","-","-","-","e","e","e","","","","");  
      		$titel = strtolower ($titel);  
      		$titel = stripslashes($titel);  
      		$titel = htmlspecialchars($titel);  
      		$titel = str_replace($i_vars,$o_vars,$titel);  
      		  
      		return $titel;  
      	}  
      
      

      Sollte es eine bessere Lösung geben, bitte melden. Ich bin für jede Verbesserung offen.

      1. Lieber Martin_Online,

        Sollte es eine bessere Lösung geben, bitte melden. Ich bin für jede Verbesserung offen.

        mb_strtolower() sollte noch besser zu nutzen sein. Insbesondere solltest Du aber ein sehr wachsames Auge auf Deine verwendeten Kodierungen haben (ISO-8859-1 versus UTF-8)!

        Liebe Grüße,

        Felix Riesterer.

        --
        "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
      2. Meine Herren!

        Sollte es eine bessere Lösung geben, bitte melden. Ich bin für jede Verbesserung offen.

        Wenn die Kleinschreibung rein ästhetischer Natur ist, dann kannst du das mit CSS erreichen:

        .title {  
           text-transform: lowercase;  
        }
        

        Das hat den Vorteil, dass der Titel im HTML regulär in Groß/Kleinschreibung stehen darf und deshalb beim Kopieren (Copy&Paste) die Groß/Kleinschreibung erhalten bleibt.

        --
        “All right, then, I'll go to hell.” – Huck Finn
        1. Hallo,

          Wenn die Kleinschreibung rein ästhetischer Natur ist, dann kannst du das mit CSS erreichen:

          .title {

          text-transform: lowercase;
          }

          
          >   
          > Das hat den Vorteil, dass der Titel im HTML regulär in Groß/Kleinschreibung stehen darf und deshalb beim Kopieren (Copy&Paste) die Groß/Kleinschreibung erhalten bleibt.  
            
          In diesem Fall geht es mir darum was später in der URL steht. Meine persönliche Meinung ist, dass dort alles klein geschrieben werden sollte.
          
          1. Hello,

            In diesem Fall geht es mir darum was später in der URL steht. Meine persönliche Meinung ist, dass dort alles klein geschrieben werden sollte.

            Für die URL musst Du sowieso eine vorgeschriebene "URL-Codierung" einhalten, damit es nicht kracht.

            Wenn die URL auch dazu da sein soll, im Dateisystem abgebildet zu werden, dann wird es ganz ärgerlich. PHP und Windows vertragen sich nicht sonderlich gut bezüglich der erlaubten Zeichen im Dateisystem. Der Bug sitzt aber mMn in PHP.

            Liebe Grüße aus dem schönen Oberharz

            Tom vom Berg

            --
             ☻_
            /▌
            / \ Nur selber lernen macht schlau
            Die ultimative Seite für Selbermacher
          2. Lieber Martin_Online,

            In diesem Fall geht es mir darum was später in der URL steht. Meine persönliche Meinung ist, dass dort alles klein geschrieben werden sollte.

            willst Du Sonderzeichen "so lassen", oder soll aus einem "Ä" ein "ae" werden?

            Aus ähnlichen Überlegungen hatte ich mir einmal eine Ersetzungsfunktion geschrieben, die Sonderzeichen durch ASCII-kompatible Varianten ersetzt.

            Liebe Grüße,

            Felix Riesterer.

            --
            "Wäre die EU ein Staat, der die Aufnahme in die EU beantragen würde, müsste der Antrag zurückgewiesen werden - aus Mangel an demokratischer Substanz." (Martin Schulz, Präsident des EU-Parlamentes)
            1. Hello lieber Felix,

              willst Du Sonderzeichen "so lassen", oder soll aus einem "Ä" ein "ae" werden?

              Aus ähnlichen Überlegungen hatte ich mir einmal eine Ersetzungsfunktion geschrieben, die Sonderzeichen durch ASCII-kompatible Varianten ersetzt.

              Das Thema hatten wir schon mal.
              Es gibt da auch den Normalizer, sofern das intl-Modul geladen ist in PHP.

              http://de3.php.net/manual/en/class.normalizer.php

              Für URLs ist das absolut nicht trivial! Wenn Das Projekt portabel bleiben soll, sollte Martin schon die Schnittmenge der üblichen Systeme suchen.

              siehe auch
              http://wiki.selfhtml.org/wiki/Artikel:PHP/File_Upload#Dateinamen_anpassen

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              Die ultimative Seite für Selbermacher
          3. Meine Herren!

            In diesem Fall geht es mir darum was später in der URL steht. Meine persönliche Meinung ist, dass dort alles klein geschrieben werden sollte.

            Je nachdem wo in der URL, sind Großbuchstaben erlaubt, die Path-Komponente darf zum Beispiel Großbuchstaben enthalten:

            http://example.com/DasIstErlaubt

            Die Sheme-Komponente dagegen nicht. Folgendes Beispiel wäre also keine valide URL, wird aber von den meisten Programmen trotzdem verstanden:

            HTTP://example.com/

            Für URL-Kodierung benutzt du am besten urlencode bzw. rawurlencode.

            --
            “All right, then, I'll go to hell.” – Huck Finn
            1. Hello,

              Für URL-Kodierung benutzt du am besten urlencode bzw. rawurlencode.

              Ob das "am besten" ist, ist mMn Philosphie, denn die codierten URLs sind nicht mehr sehr menschenfreundlich, wenn sie lauter %XY enthalten. Eine Url ist leichter merkbar, wenn man sich auf einen begrenzten ASCII-Zeichenvorrat beschränkt.

              Liebe Grüße aus dem schönen Oberharz

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              Die ultimative Seite für Selbermacher
              1. Meine Herren!

                Für URL-Kodierung benutzt du am besten urlencode bzw. rawurlencode.

                Ob das "am besten" ist, ist mMn Philosphie, denn die codierten URLs sind nicht mehr sehr menschenfreundlich, wenn sie lauter %XY enthalten. Eine Url ist leichter merkbar, wenn man sich auf einen begrenzten ASCII-Zeichenvorrat beschränkt.

                Das ist zumindest die beste Variante, um dem Kontext-Wechsel zu begegnen.

                Verzierungen, zum Beispiel die Ersetzung von Umlauten, sollten vor dem Kontext-Wechsel passieren.

                --
                “All right, then, I'll go to hell.” – Huck Finn
                1. Hello,

                  Für URL-Kodierung benutzt du am besten urlencode bzw. rawurlencode.

                  Ob das "am besten" ist, ist mMn Philosphie, denn die codierten URLs sind nicht mehr sehr menschenfreundlich, wenn sie lauter %XY enthalten. Eine Url ist leichter merkbar, wenn man sich auf einen begrenzten ASCII-Zeichenvorrat beschränkt.

                  Das ist zumindest die beste Variante, um dem Kontext-Wechsel zu begegnen.

                  Das will ich auch keinesfalls bestreiten. Das sollte immer als letzte Aktion durchgeführt werden.

                  Verzierungen, zum Beispiel die Ersetzung von Umlauten, sollten vor dem Kontext-Wechsel passieren.

                  Und wenn man alle Ersetzungen passend vorgenommen hat, sollten sich die Strings vor und nach dem rawurlencode() auch nicht mehr unterscheiden.

                  Liebe Grüße aus dem schönen Oberharz

                  Tom vom Berg

                  --
                   ☻_
                  /▌
                  / \ Nur selber lernen macht schlau
                  Die ultimative Seite für Selbermacher
      3. Tach!

          $titel = strtolower ($titel);  
          $titel = stripslashes($titel);  
          $titel = htmlspecialchars($titel);  
          $titel = str\_replace($i\_vars,$o\_vars,$titel);  
        

        Was bitte sucht denn htmlspecialchars() in dieser illustren Runde? stripslashes() braucht es auch nicht. Wenn du Nicht-Buchstaben-Zeichen ersetzen/löschen möchtest, bau die mit in deine Liste der zu ersetzenden Zeichen ein.

        $i_vars = array(" ","Ä","Ö","Ü","ä","ö","ü","ß","?","/","-","é","è","é","&","&","´","´");

        Außerdem deutet es auf ein Problem hin, wenn du hier mit HTML-Entitys arbeitest. Warum stehen denn solchen in deinen zu verarbeitenden Daten? Solche Umschreibungen gehören höchstens in die Ausgabe (normalerweise und heutzutage aber direkt UTF-8-kodiert). Wenn du diese Umschreibungen vom Browser bekommst, wenn der Nutzer fremdländische Zeichen eingibt, solltest du dich mal mit einer Umstellung auf UTF-8 befassen.

        dedlfix.