mit php Javascript Code erzeugen: Problem mit mehrzeiligen Funktionsparametern

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

  • mit php Javascript Code erzeugen: Problem mit mehrzeiligen Funktionsparametern

    Hallo,
    ich hab ein kleines Problem.

    ich erzeuge dynamisch ein Dropdown-Menü aus Werten einer mysql-Datenbank. In der While-Schleife wird zugleich ein javascript-Code von php erzeugt, der später ein Array füllen soll mit den gleichen Werten aus der dB. Nun habe ich ein Problem, wenn der ausgelesene Wert aus der DB ein mehrzeiliger String ist und ich diesen dann im Funktionsaufruf des Javascript-Codes übergeben will.
    Mit einem Beispiel wird es verständlicher, hoffe ich:

    Der mit php erzeugte Javascript-Code sieht so aus:

    produkte_db(1560, '0.00','voll','','');
    produkte_db(109, '50.00','voll','60 Minuten','bstd');
    produkte_db(1540, '11.40','voll','zeile1
    zeile2
    zeile3','i30');
    ... die letzte Anweisung führt dann im browser zu Fehlern verständlicherweise. Dieser bemängelt, dass die Zeichenfolgekonstante nicht abgeschlossen wird.

    korrekt müsste dieser letzte Aufruf so aussehen:
    produkte_db(1540, '11.40','voll','zeile1 \n zeile2 \n zeile3','i30');
    oder auch so:
    produkte_db(1540, '11.40','voll','zeile1 <br/>zeile2 <br/> zeile3','i30');

    Aber ich weiß nicht, wie ich den Parameter bearbeiten muss, dass er in eine Zeile geschrieben wird. nl2br führen auch nur dazu, dass zusätzlich <br/> eingefügt wird, aber der javascript-Code bleibt an dieser Stelle trotzdem mehrzeilig.

    der code:


    Die Befüllung des Dropdown - Menüs:
    PHP-Code:
     while ($result = mysql_fetch_row($erg){
        ....                                    
        // der String mit dem javascript-Code wird erzeugt: 
         $jscode .="produkte_db($id, '$result[2]','$result[3]','$result[4]','$result[5]');\n";
                                        
       ?><option  value='<?=$id?>'><?=$result[2]?></option><?
        }//end while

    ....<?=$jscode?>
    produkte_db ist ein Funktionsaufruf in Javscript, innerhalb der Funktion werden dann die übergegeben Parameter in ein Array geschrieben sollen...


    Hat jemand einen Tipp für mich?

    Gruß + Dank
    lizzy

  • #2
    woher kommt denn das \n? von dir? wenn ja, lass es weg. wenn nicht, dann ggf. per php mit trim oder chop.

    gruß
    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      das \n gibt es so noch gar nicht, zumindest nicht so, dass ich es abgreifen könnte. Das war eher als Variante für die Musterlösung gemeint. Mit trim und chop entferne ich ja nur Leerzeichen, aber das hat ja nichts mit meinem Problem zu tun.
      Ich hab es wohl nicht so gut erklärt, oder?!

      also nochmal zur Verdeutlichung: in dem vierten Parameter, der der javascript-funktion mitgegeben wird, ist ein String, der Zeilenumbrüche enthält und die Stellen an denen die Zeilen umbrochen werden, würde ich zwar gern irgendwie kennzeichnen, so dass ich sie später reproduzieren kann, die Zeilenumbrüche selbst dürfen aber nicht bei der Ausgabe des javascript-Codes im Quellcode der Seite dargestellt werden, sonst wird der javascript-Code als fehlerhaft interpretiert.

      so sieht der Quellcode der erzeugten Seite im Moment aus:

      jsfunktionsaufruf(param1, "dies ist
      der param2", param3);

      so soll es aussehen:
      jsfunktionsaufruf(param1, "dies ist + der param2", param3);

      wobei das + lediglich ein Hinweis sein soll, das hier ein Zeilenumbruch war. Das könnte auch jedes andere Zeichen sein, das ich eindeutig verwenden kann.

      Da der js-code mit php erzeugt wird, dachte ich, ich könnte mittels php vielleicht diese Zeilenumbrüche, die der String aus der DB enthält, entfernen oder ersetzen durch ein beliebig anderes Zeichen, aber so, dass die Zeilenumbrüche auch im Quellcode nicht mehr ausgegeben werden.

      Gerade kommt mir noch die Idee: könnte ich denn das ausgelesene Datenbankfeld zeilenweise auslesen mit php? Also der Inhalt steht ja zwar in einer Zelle, aber mysql merkt sich da die Zeilenumbrüche, da müsste es ja vielleicht auch möglich sein, diese Zeilen einzeln zu erfassen...

      Gruß
      lizzy

      Kommentar


      • #4
        Ging das in JS nicht so?
        #13#10

        Also \n ersetzen durch #10 (außerhalb des Strings) und \r durch #13?

        Kommentar


        • #5
          Dazu müsste trozdem der Text erstmal in einer Zeile stehen...
          Vielleicht mit regulärem Ausdruck der nach Zeilenumbruch sucht? Bin mir grad nicht so sicher, ob ein Zeilenuumbruch - auch ohne dass er im string als \n vorkommt - erkannt wird...aber andere wissen da sicher rat.

          Kommentar


          • #6
            Warum denn nicht einfach den PHP-Zeilenumbruch durch einen Javascript-Zeilenumbruch ersetzen?

            Also ggf. \r entfernen, und \n durch \\n ersetzen - ergibt in der Ausgabe ein wunderschönes "dies ist\nder param2", womit JS kein Problem hat ...
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              PHP-Code:
              $string str_replace ('"\n"','#',$string); 
              z.b.

              gruß
              peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                sorry, dass ich mich jetzt erst wieder melde.. konnte nicht früher..

                Das Problem ist aber leider immer noch nicht behoben. die str_replace-Varianten hab ich natürlich alle schon durchprobiert.

                Er ersetzt zwar dann das \n oder auch das \r
                nur im Quelltext wird der Zeilenumbruch trotzdem dargestellt, das sieht dann so aus:

                nach

                PHP-Code:
                $str str_replace("\n","#",$result[4]); 
                sieht der html-quelltext immer noch so aus:
                jsfunktionsaufruf('param1', 'dies ist
                #der 2. Parameter
                #das gehört auch noch dazu','param3');
                Hat niemand noch ne Idee?

                Gruß
                lizzy

                Kommentar


                • #9
                  gelöscht
                  Zuletzt geändert von hal45; 12.01.2007, 19:18.

                  Kommentar


                  • #10
                    Hallo

                    Probiere das ganze mal mit einfachen Anführungszeichen

                    Code:
                     $jscode .= 'produkte_db($id, \\''.$result[2].'\\',\\''.$result[3].'\\',\\''.$result[4].'\\',\\''.$result[5].'\\');';
                    Dann werden mögliche Zeilenumbrüche durch \n nicht dargestellt

                    Kommentar


                    • #11
                      hab hier noch einen uralt-schnispel, mit dem ich dreamweaver-dateien früher bearbeiten musste:
                      PHP-Code:
                      $superstring trim ($superstring);
                      $superstring eregi_replace ("\r\n"," ",$superstring);
                      $superstring preg_replace("/\s+/"" "$superstring);
                      $superstring str_replace ('"\n"','',$superstring);
                      $superstring str_replace ('\t','',$superstring); 
                      frag bitte nach dem warum und wie, ich habe keine ahnung mehr. ich weiss nur, dass es die einzige möglichkeit war, da wirklich alles rauszuschmeissen,

                      gruß
                      peter
                      Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                      Meine Seite

                      Kommentar


                      • #12
                        Original geschrieben von hal45
                        behoben. die str_replace-Varianten hab ich natürlich alle schon durchprobiert.
                        Natürlich, $newbee hat immer schon "alles" probiert - nur das richtige mal wieder nicht ...
                        Er ersetzt zwar dann das \n oder auch das \r
                        nur im Quelltext wird der Zeilenumbruch trotzdem dargestellt
                        Wenn sowohl \r als auch \n vorhanden sind (welches System was verwendet, darüber hast du dich ja hoffentlich informiert), dann natürlich nicht nur eins von beidem ersetzen, sondern beides ...
                        PHP-Code:
                        $text 'dies ist
                        der 2. Parameter
                        das gehört auch noch dazu'
                        ;

                        echo 
                        str_replace(array("\r""\n"), array('''\n'), $text); 
                        So, und das System, auf dem das nicht
                        Code:
                        dies ist\nder 2. Parameter\ndas gehört auch noch dazu
                        ausgeben sollte, was sich - entsprechend in Stringbegrenzer eingekleidet - wunderbar als Stringliteral in Javascript verwenden lässt, zeigst du mir jetzt bitte ...
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          Hi,
                          also mit str_replace klappts doch:
                          die kombi machts, so wie wahsaga vorgeschlagen hat:


                          $str = str_replace("\r","",$result[4]);
                          $str = str_replace("\n","\\n",$str);

                          Das ersetzen von " durch ' so tco vorgeschlagen hat, funzt auch nicht. Und den code-schnipsel von peter werde ich mir auf alle Fälle auch aufheben.

                          Also dank an euch!
                          Gruß
                          lizzy
                          Zuletzt geändert von hal45; 12.01.2007, 19:34.

                          Kommentar


                          • #14
                            wahsaga: du warst mit deinem posting eine Minute zu schnell und du hattest ja in allem recht was du sagst.

                            Kommentar

                            Lädt...
                            X