Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Echo Funktion ersetzen

Einklappen

Neue Werbung 2019

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

  • PHP Echo Funktion ersetzen

    Hallo,

    undzwar habe ich ein kleines Problem.

    Ich möchte eine Funktion ersetzen.

    Ich verwende verschiedene Sprachdateien und rufe diese je nach Einstellung ab.

    Beispiel : (funktioniert auch super)

    PHP-Code:
    admin.php?lang=de&category=general&page=overview
    admin
    .php?lang=en&category=general&page=overview 
    In der php Datei habe ich Platzhalter für die Sprachvariablen und die werden auch durch die jeweilige Sprache ersetzt.

    PHP-Code:
    <?php echo $lang['name:general'?>
    Jetzt möchte ich aber nicht immer bei der Variable in der .php Datei immer <?php echo $lang.......?> aufrufen sondern
    möchte es ersetzen durch

    PHP-Code:
    {name:general
    Auch bei Dateiinclude möchte ich statt

    PHP-Code:
    <?php include('../../datei.php'); ?>
    einfach nur

    PHP-Code:
    {datei:name
    haben.

    Ich weiß es sind zwei verschiedene Funktionen aber vielleicht hat ja jemand da eine Idee.

    Ich weiß das es mit preg_replace oder str_replace geht aber ich finde einfach keine Lösung die funktioniert.

    Hier mein erster Ansatz für normales ersetzen fester Wörter.

    PHP-Code:
    $string_old  = array('1''2''3''4''5');
    $string_new = array('Eins''Zwei''Drei''Vier''Fuenf');
    $string '1';
    echo 
    str_replace('1''Eins'$string); 
    Was ich nicht verstehe, ist $string. Er ersetzt mir zwar die "1" durch "Eins" aber schreibt auch eine 1 davor. (1Eins)

    Was muss ich ändern damit nur noch der neue Wert da steht und das er den Wert aus der Sprachdatei liest.

    Meine Sprachdatei sieht so aus.

    PHP-Code:
    <?php

    $lang 
    = array();

    // Allgemein

    $lang['text:cms_title'] = 'Website Titel';

    $lang['access:admin'] = 'Administrator';
    $lang['access:mod'] = 'Moderator';
    $lang['access:sup'] = 'Supporter';
    $lang['access:admin'] = 'Administrator';
    $lang['access:user'] = 'Benutzer';

    ?>


    Hoffe, das mir da jemand bei helfen kann.

    Grüße cHaOsFaTz

  • #2
    PHP-Code:
    include('some_language_file.php');

    $translator = function($match) use ($lang){
      return 
    $lang[$match[1]];
    };

    preg_replace_callback('#{(.*?)}#'$translator$your_template); 
    E: Zu bevorzugen wäre es, zu einer "richtigen" Template-Engine zu greifen.
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Ich weiß es sind zwei verschiedene Funktionen aber vielleicht hat ja jemand da eine Idee.
      Wenn Du es weißt, warum willst Du es dann trotzdem falsch machen? Btw: Beides sind keine Funktionen.
      [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


      • #4
        Vielen Dank für die schnelle Antwort.

        Ich habe bereits 2 Sprachdateien die wie folgt aufgerufen werden.

        Wie müsste in meine Fall dann der Code von dir aussehen, da ich dies ja direkt in den nächsten Code schreiben könnte.

        PHP-Code:
        <?php

        $lang 
        $_GET['lang'];

        switch (
        $lang) {
          case 
        'de':
          
        $lang_directory 'de';
          
        $lang_file 'de.php';
          break;

          case 
        'en':
          
        $lang_directory 'en';
          
        $lang_file 'en.php';
          break;

          default:
          
        $lang_directory 'en';
          
        $lang_file 'en.php';

        }

        include_once 
        '../../languages/'.$lang_directory.'/'.$lang_file;

        ?>
        und dann noch der Pfad hinter der Sprache.

        PHP-Code:
        <?php

            $url 
        '../../includes/admin/';
            
            if (!empty(
        $_GET['category'])) 
            {
                
        $url .= $_GET['category'] . '/';
            }
            
            if (!empty(
        $_GET['page'])) 
            {
                
        $url .= $_GET['page'] . '.php';
            }
            include 
        $url;
                
        ?>
        Beispielink wäre dann.

        PHP-Code:
        admin.php?lang=de&category=managment&page=users

        oder

        admin
        .php?lang=en&category=general&page=overview 
        Möchte einfach nur die Variable ändern, nicht jedesmal php echo eingeben sondern schlicht und einfach nur {name:cms_title} eingeben.

        Kommentar


        • #5
          Echo ist keine Funktion. Das was du willst nennt sich templating. Das was du da tust ist gefährlich.
          [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


          • #6
            Zitat von tr0y Beitrag anzeigen
            Echo ist keine Funktion. Das was du willst nennt sich templating. Das was du da tust ist gefährlich.
            Vielen Dank für die Info. Aber was ist denn daran gefährlich, kannst du das bitte näher erläutern.

            Ich möchte lediglich eine php Datei mit verschiedenen Sprachen verbinden und statt

            PHP-Code:
            <?php echo $lang['name:general'?>
            lieber

            PHP-Code:
            {name:general
            verwenden, da es einfacher ist und übersichtlicher.

            Vielleicht kann mir da ja jemand bei dem Problem helfen.

            Kommentar


            • #7
              du verwendest doch quasi schon templating-Syntax ... lies dich bitte ein ...

              gefährlich ist der Ansatz in deiner admin.php
              PHP-Code:
               <?php

                  $url 
              '../../includes/admin/';
                  
                  if (!empty(
              $_GET['category'])) 
                  {
                      
              $url .= $_GET['category'] . '/';
                  }
                  
                  if (!empty(
              $_GET['page'])) 
                  {
                      
              $url .= $_GET['page'] . '.php';
                  }
                  include 
              $url;
                      
              ?>
              ungeprüft werden Getparameter verwendet, um ein beliebiges Script aufzurufen - jetzt braucht deine Webseite nur noch eine ähnlich "sichere" Upload-Funktion und dein Server ist so gut wie gekapert
              "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

              Kommentar


              • #8
                Zitat von eagle275 Beitrag anzeigen
                du verwendest doch quasi schon templating-Syntax ... lies dich bitte ein ...

                gefährlich ist der Ansatz in deiner admin.php
                PHP-Code:
                 <?php

                    $url 
                '../../includes/admin/';
                    
                    if (!empty(
                $_GET['category'])) 
                    {
                        
                $url .= $_GET['category'] . '/';
                    }
                    
                    if (!empty(
                $_GET['page'])) 
                    {
                        
                $url .= $_GET['page'] . '.php';
                    }
                    include 
                $url;
                        
                ?>
                ungeprüft werden Getparameter verwendet, um ein beliebiges Script aufzurufen - jetzt braucht deine Webseite nur noch eine ähnlich "sichere" Upload-Funktion und dein Server ist so gut wie gekapert
                Diese Parameter werden nicht ungeprüft gesendet, da man sich vorher einloggen muss und diese Abfrage steht nicht in der admin.php sondern in einer einzelnen Datei.

                In dem include Ordner sind die Inhalte für den Contentbereich.

                Mit dem Templating was ich bereits nutze, das habe ich auch soweit verstanden.

                Da ich aber noch ein Anfänger bin, weiß ich nicht genau wie in meinem Fall str_replace aussehen muss.

                Kommentar


                • #9
                  Zitat von cHaOsFaTz Beitrag anzeigen
                  Vielen Dank für die Info. Aber was ist denn daran gefährlich, kannst du das bitte näher erläutern.

                  Ich möchte lediglich eine php Datei mit verschiedenen Sprachen verbinden und statt

                  PHP-Code:
                  <?php echo $lang['name:general'?>
                  lieber

                  PHP-Code:
                  {name:general
                  verwenden, da es einfacher ist und übersichtlicher.

                  Vielleicht kann mir da ja jemand bei dem Problem helfen.
                  Ich würde das nicht mit include-Krücken regeln sondern eine Translation-Komponente dafür verwenden: http://symfony.com/doc/current/book/translation.html

                  In Verbindung mit Twig ( Template Engine ) wird dann quasi das erreicht was du mit deiner String-Syntax versuchst zusammenzubauen, nur ist das schon fertig und von einer riesigen Community tot-getestet.

                  Dein Include ist insofern gefährlich, insofern du erlaubte Includes nicht Whitelistest. GET kann über die URL ohne weiteres manipuliert werden, und gerade in Verbindung mit Include kann so PHP-Code ausgeführt werden der ungefiltert irgendwo rumliegen kann.
                  [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


                  • #10
                    Ich werde mir das mal auf der Seite anschauen.

                    Habe von so einer Engine schon öfters gehört, ich wollte mal Smarty verwenden aber ich wollte eigentlich was eigenes machen.

                    Da wie bereits gesagt, mein eigenes aber Sicherheitslücken aufwirft, werde ich mich mal nach fertigen Template-Engine umschauen.

                    Kommentar


                    • #11
                      Twig: http://twig.sensiolabs.org/
                      Twig Translation: http://symfony.com/doc/current/book/...twig-templates

                      Viel Spass.

                      P.S.: Im Anfäger-Forum ist ein Composer Guide von mir gepinnt, den solltest du anwenden um Twig und die Symfony Komponente für dein Projekt verfügbar zu machen und um beides upzudaten.
                      [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

                      Lädt...
                      X