Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHP Funktion gesucht // ALLE Sonderzeichen zu _ wandeln

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] PHP Funktion gesucht // ALLE Sonderzeichen zu _ wandeln

    Hi,

    ich bau mir grad eine SEO-URL zusammen.
    Das klappt so weit.

    Damit keine Sonderzeichen in der URL vorkommen, setze ich bereits jetzt schon str_replace ein.

    Nur finde ich immer wieder URL's wo ich str_replace erweitern muß.
    Das finde ich extrem ungünstig, da ich ja nun die "Tabelle" nicht mit allen möglichen Zeichen ersetzen kann.

    Gibt es eine PHP-Funktion, wo ich "sagen" kann, das das alles z.B. mit _ ersetzt werden soll AUSSER natürlich a-z (Umlaute heißen jetzt schon ae,oe,etc.) ?

    Leider klappt ein Jokerzeichen (*) mit str_replace nicht. Auch wenn ich es maskiere will es nicht.

    Hat einer einen Tipp ?

  • #2
    Schau dir PHP: preg_replace - Manual an.
    [URL]http://hallophp.de[/URL]

    Kommentar


    • #3
      preg_replace
      [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

      Kommentar


      • #4
        Tut mir leid.
        Die Funktion selbst kenne ich im Groben.
        Auch nach erneuten einlesen sehe ich da keine Lösung für mein Problem.

        Denn auch dort muß ich alle Zeichen deklarieren, die ersetzt werden sollen. (?)

        Edit:
        PHP-Code:
        <?php
        $zeichenkette 
        '15. April 2003';
        $suchmuster '/(\d+)\. (\w+) (\d+)/i';
        $ersetzung '${2}1,$3';
        echo 
        preg_replace($suchmuster$ersetzung$zeichenkette);
        ?>
        Das hab ich schon verstanden... ich kann hier also wie bei preg_match nach gewissen werten suchen. Aber diese muß ich ja angeben. = und damit bin ich ja wieder beim anfang

        Kommentar


        • #5
          Dann schau dir mal an was ein Ausdruck der Form [^A-Z] macht
          [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
          [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

          Kommentar


          • #6
            Zitat von fab Beitrag anzeigen
            Dann schau dir mal an was ein Ausdruck der Form [^A-Z] macht
            AHH... so ist das gemeint.
            Das klappt. Danke

            PHP-Code:
                $suchmuster '/[^A-Z]/i';
                
            $ersetzung '';
                
            $URL preg_replace($suchmuster$ersetzung$URL); 

            Kommentar


            • #7
              Die Funktion selbst kenne ich im Groben.
              Das muss aber sehr sehr grob sein.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Wenn du eine Seite, die z.B. den Namen 'ältere #Programmierer# suchen nach Lösungen !' in einen gültigen URL umwandeln möchtest, dann geht das mit urlencode() sehr viel einfacher als mit str_replace-Orgien.
                PHP: urlencode - Manual
                [PHP]if ($var != 0) {
                $var = 0;
                }[/PHP]

                Kommentar


                • #9
                  Zitat von Wolla Beitrag anzeigen
                  Wenn du eine Seite, die z.B. den Namen 'ältere #Programmierer# suchen nach Lösungen !' in einen gültigen URL umwandeln möchtest, dann geht das mit urlencode() sehr viel einfacher als mit str_replace-Orgien.
                  PHP: urlencode - Manual
                  Hab ich schon drin... aber erst zum Schluss... wenn ich alle "erhaltungswürdige" Zeichen umgewandelt habe.

                  Denn urlencode macht aus einen Leerzeichen %20 draus, was in den Googel-Suchseiten nicht grad toll aussieht. Und der dusslige IE zeigt als einzigster auch noch %20 an... FF/Opera etc. setzen es in leerezeichen um.

                  Drum lasse ich erstmal str_replace drüberlaufen, der mir gewisse Sonderzeichen (und auch umlaute) in gewünschte Formen umwandelt.

                  Dann preg_replace ... wird alles weggeschnitten, was nich 0-9 und A-Z(a-z) und _ ist.

                  Zum Schluss dann sicherheitshalber nochmal über rawurlencode... was zwar durch die beiden vorhigen Befehle unnötig sein sollte (aber wer weiß... sicher is sicher)

                  PHP-Code:
                    static public function formatUrl($Kat)
                    {
                      
                  $Kat str_replace(self::$Decodedself::$Encodedstrip_tags($Kat));

                      
                  $suchmuster '/[^A-Z0-9\_]/i';
                      
                  $ersetzung '';
                      
                  $Kat preg_replace($suchmuster$ersetzung$Kat);
                      
                      return 
                  rawurlencode($Kat);
                    } 

                  Kommentar


                  • #10
                    htmlentities(); und dann alle &###; sonderzeichen raus-replacen ?
                    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                    Kommentar


                    • #11
                      nö... so klappt das schon ganz gut. Zumal ich es auch selbst direkt steuern kann.

                      Ich hab das ganze jetzt erweitert und bin nun soweit, das ich die Funktion wo anders auch mehrmal benötige.

                      PHP-Code:
                      function clearurl($value)
                      {
                          
                      $value strtolower($value);              
                          
                      $value ereg_replace('ü','ue',$value);
                          
                      $value ereg_replace('ä','ae',$value);
                          
                      $value ereg_replace('ö','oe',$value);    
                          
                      $value ereg_replace('ß','ss',$value);        
                          
                          
                      $value preg_replace('/[^A-Z0-9]\_/i''_'$value); 
                          return 
                      $value;
                      }
                          
                      $article->titel clearurl($article->titel); 
                      Wenn ich es ohne Funktion aufrufe klappt alles.

                      Sobald ich es in funktion setze, bekomme ich die Fehlermeldung:
                      Code:
                      PHP Fatal error:  Call to undefined function clearurl()
                      Wo liegt denn hier mein Fehler ?
                      Es ist doch (meiner Meinung) nach korrekt aufgerufen.

                      Kommentar


                      • #12
                        Also dein Code-Snippet da oben alleine funktioniert, hast du bei dir vielleicht einfach einen Tippfehler im Funktionsnamen?

                        PHP-Code:
                            $value ereg_replace('ü','ue',$value);
                            
                        $value ereg_replace('ä','ae',$value);
                            
                        $value ereg_replace('ö','oe',$value);    
                            
                        $value ereg_replace('ß','ss',$value); 
                        Warum verwendest du da [MAN]ereg_replace[/MAN]? Das sind keine regulären Ausdrücke, da tut es [MAN]str_replace[/MAN]. Geht dann auch in einem einzigen Aufruf mit
                        PHP-Code:
                        str_replace(array('ä','ö','ü'),array('ae','oe','ue'), $value); 
                        [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                        [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                        Kommentar


                        • #13
                          Zitat von fab Beitrag anzeigen
                          Also dein Code-Snippet da oben alleine funktioniert, hast du bei dir vielleicht einfach einen Tippfehler im Funktionsnamen?

                          Möchte ich mal bezweifeln:

                          Der Aufruf stand ja drin: Der ist gleich mit der Funktion
                          Code:
                          $article->titel = clearurl($article->titel);
                          
                          function clearurl($value)
                          Daran sollte es eigentlich nicht liegen


                          Edit: Rufe ich es wie folgt auf, klappt es. => done

                          PHP-Code:
                          static public function clearurl($value)

                          self::clearurl($article->titel

                          Kommentar


                          • #14
                            Ich muß dochnochmal was nachfragen:

                            Ich lasse mit preg_replace einen Wert durchsuchen und alle (Sonder)zeichen, die nicht a-z und 0-9 sind durch _ ersetzen.
                            Klappt auch alles.

                            Nun bin ich grad über eine Besonderheit gestoßen.
                            Wenn z.B.
                            "text / text"
                            vorkommt, dann werden die beiden Leerzeichen sowie das / durch ein Unterstrich ersetzt. (text___text)

                            Das ist mir zwar schon bei 2 x Unterstrich aufgefallen... aber irgendwie finde ich meine jetzige Lösung nicht sehr praktisch.

                            Denn ich habe diese nun wie folgt erstmal gelöst. 4 x _ darf aber nicht vorkommen...

                            PHP-Code:
                                public static function clearurlSitemap($value)
                                {
                                    
                            $value strtolower($value);
                                    
                            $replace = array(     'ü'    =>    'ue',
                                                        
                            'ä'    =>    'ae',
                                                        
                            'ö'    =>    'oe',
                                                        
                            'ß'    =>    'ss',
                                            );
                                    
                            $value strtr($value$replace);
                                    
                            $value preg_replace('/[^a-z0-9]/''_'$value); 
                                    
                            $value str_replace("___""_"$value);
                                    
                            $value str_replace("__""_"$value);

                                    return 
                            $value;
                                } 
                            Kennt einer eine Lösung, wie ich mehr als 2 _ unterbinden kann, ohne das ich
                            a: mittels str_replace jede erdenkliche Anzahl deklarieren muß
                            oder
                            b: eine Schleife bauen, wo ich die _ zähle und bei mehr als 1 count diese wegschneide

                            Danke

                            Kommentar


                            • #15
                              Ja. Wiederum reguläre Ausdrücke. Ließe sich aber auch mit der ursprüngl. Ersetzung kombinieren, dass gelich alle Umlaute/SZ in Folge gematcht werden. Über kurz oder lang kommst Du nicht um regExp herum.
                              [COLOR="#F5F5FF"]--[/COLOR]
                              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                              [COLOR="#F5F5FF"]
                              --[/COLOR]

                              Kommentar

                              Lädt...
                              X