XML Absätze, Sonderzeichen & Co.

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

  • XML Absätze, Sonderzeichen & Co.

    Hi,
    ich benutzte simple XML, allerdings hab ich Schwierigkeiten
    mit Sonderzeichen und Absätzen, denn wenn ich per
    Formularfeld Daten eingebe mit äöü dann gibt er mir zig
    Fehlermeldungen aus, und die DB kracht komplett zusammen,
    und dann wäre noch das Problem mit Absätzen, wenn ich
    im Textfeld/Formularfeld Absätze mache, dann beachtet
    er mir bei der Ausgabe der Datenbank diese nicht und
    schreibt alles in eine Zeile :/

    Wie kann ich das Problem beheben?

    Teilcode zum Einlesen und Schreiben meiner XML:
    PHP-Code:
    $xml_path_text $_root_doc_dir."db/flash_subnavi_text.xml";
    $xml_text simplexml_load_file($xml_path_text);
    $xml_text->addChild($getSubSection);

    $xmlData_text $xml_text->$getSubSection->addChild("text");
    $xmlData_text->addAttribute('name',$tmp_getEintrag));
    $xmlData_text->addAttribute('url',$getEintrag);
    $xmlData_text->addAttribute('text',$_POST['myText']));
            
    write_file($xml_text->asXML(),$xml_path_text); 
    mfg & thx darki
    Zuletzt geändert von darki777; 31.01.2007, 12:11.

  • #2
    Re: XML Absätze, Sonderzeichen & Co.

    Original geschrieben von darki777
    ich benutzte simple XML, allerdings hab ich Schwierigkeiten
    mit Sonderzeichen und Absätzen, denn wenn ich per
    Formularfeld Daten eingebe mit äöü dann gibt er mir zig
    Fehlermeldungen aus, und die DB kracht komplett zusammen,
    Dann mache dir Gedanken über die Zeichenkodierung.

    UTF-8 wäre zu empfehlen.
    und dann wäre noch das Problem mit Absätzen, wenn ich
    im Textfeld/Formularfeld Absätze mache, dann beachtet
    er mir bei der Ausgabe der Datenbank diese nicht und
    schreibt alles in eine Zeile :/
    Ausgabe als was - als HTML?

    Dass dabei Zeilenumbruchzeichen keinen sichtbaren Zeilenumbruch erzeugen, sollte doch wohl klar sein.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ich hab utf8, auch die funktionen utf8_decode() und utf8_encode()
      kamen zum Einsatz, hab mir auch extra ne etwas längere Funktion
      hierzu geschrieben, allerdings kracht die DB trotzdem jedesmal
      zusammen, und langsam gehn mir die Ideen aus wieso das so ist.
      Denn wenn ich Sonderzeichen manuell in die DB eintrage, dann
      klappt das ja sogar wunderbar, aber wenn ich es durch simpleXML
      mach, dann kodiert der mir das irgendwie um, ich glaub es liegt am
      Abspeichern, wenn ich asXML() verwende, was anderes fällt mir echt
      nicht mehr ein.


      Zu den Absätzen, (ja als html)
      deswegen frag ich wie ich das lösen kann?
      Muss ich die Absätze irgendwie seperat kodiern und dann wieder
      enkodiern? Oder wie ist das? Hab das nun notfalls mit nem <pre>
      Tag gelöst, klappt auch gut, allerdings wüsste ich gerne eine
      reguläre Möglichkeit das zu lösen.

      mfg & thx darki
      Zuletzt geändert von darki777; 31.01.2007, 12:37.

      Kommentar


      • #4
        Original geschrieben von darki777
        Ich hab utf8, auch die funktionen utf8_decode() und utf8_encode()
        kamen zum Einsatz,
        Wozu?
        Wenn du konsequent mit UTF-8 arbeitest, dann gibt es doch nicht ständig was zu de- und enkodieren.
        allerdings kracht die DB trotzdem jedesmal zusammen
        Abgesehen davon, dass das als Problembeschreibung nichts taugt, bezweifle ich auch, dass dem wirklich so ist.
        Denn wenn ich Sonderzeichen manuell in die DB eintrage, dann
        klappt das ja sogar wunderbar, aber wenn ich es durch simpleXML
        mach, dann kodiert der mir das irgendwie um, ich glaub es liegt am
        Abspeichern, wenn ich asXML() verwende
        Nicht "glauben" sondern nachprüfen, debuggen.

        Und asXML gibt mir wunderbares UTF-8 aus, wenn ich auch im XMl-Prolog angebe, dass ich UTF-8 verwenden möchte.
        (Ohne das kodiert es Sonderzeichen allerdings in der nummerischen Notation. Aber selbst damit dürfte es ja keine Probleme beim anschliessenden Interpretieren als UTF-8 geben.)

        Zu den Absätzen, (ja als html)
        deswegen frag ich wie ich das lösen kann?
        So, wie es die ca. 5.373 Noobs, die vor dir schon hier deswegen gefragt haben, auch gelöst haben.
        Muss ich die Absätze irgendwie seperat kodiern und dann wieder
        enkodiern? Oder wie ist das?
        Weil das gar kein so ausserordentlich ungewöhnlicher Anwendungsfall ist, könnte es ja vielleicht schon eine fertige Funktion dafür geben.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Kann ja mal passiern, das mit den Absätzen hab ich im manual zuerst
          nicht gefunden gehabt, und die Funktion hab ich zuvor nie gebraucht.

          Und wegs den Sonderzeichen, wenn ich nicht manuell
          kodiere/dekodiere und probehalber mal ein öäü
          eingebe, dann kommt nur das hier raus:


          Warning: simplexml_load_file() [function.simplexml-load-file]: /is/htdocs/wp1054544_HFLZC18U4C/www.*******//db/flash_subnavi_text.xml:5: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xE4 0xE4 0x22 0x20 in /is/htdocs/wp1054544_HFLZC18U4C/www.******/inc/get_subnavi_bauten_text.inc.php on line 14


          Und genau ab diesem Fehler geht dann gar nix mehr,
          die Fehlermeldungen laufen dann ins unendliche. Was meinst du
          mit XMl-Prolog?

          mfg & thx darki

          Kommentar


          • #6
            Original geschrieben von darki777
            Und wegs den Sonderzeichen, wenn ich nicht manuell
            kodiere/dekodiere und probehalber mal ein öäü
            eingebe, dann kommt nur das hier raus:

            Warning: simplexml_load_file() [function.simplexml-load-file]: /is/htdocs/wp1054544_HFLZC18U4C/www.*******//db/flash_subnavi_text.xml:5: parser error : [color=red]Input is not proper UTF-8, indicate encoding ![/color] Bytes: 0xE4 0xE4 0x22 0x20 in ...
            Na also, da steht doch alles was du wissen musst.

            Du lieferst kein UTF-8 - also ändere das entweder, oder gebe an, welche Kodierung du verwendest.
            Was meinst du mit XMl-Prolog?
            Auch dazu hast du also mal wieder nichts finden können ...?
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              um es als HTML auszugeben:
              PHP-Code:
              echo nl2br($string); 
              Killerspiele sollten in der Größenordnung von Kinder********************grafie eingeordnet werden.(G. Beckstein)
              - ...und solche Behauptungen in "falsches Resourcenmanagement"

              Kommentar


              • #8
                XMI-Prolog hab ich mal bei php.net gesucht,
                allerdings gehts mir nicht darum, und dass ich
                keinen UTF8 konformen String übergebe weis ich
                auch, allerdings wenn ich es als utf8 decode dann
                hab ich anderweitige Probleme mit dem encoden
                von den sonderzeichen, aber du sagtest selbst
                ein decoden/encoden/etc. würde gar nicht erst nötig sein,
                irgendwie wiedersprichst du dir selbst.

                @zerni, thx, hatte die funktion aber schon gefunden gehabt

                mfg darki
                Zuletzt geändert von darki777; 31.01.2007, 22:01.

                Kommentar


                • #9
                  Original geschrieben von darki777
                  und dass ich keinen UTF8 konformen String übergebe weis ich auch,
                  Warum änderst du dann nichts daran?
                  allerdings wenn ich es als utf8 decode dann
                  hab ich anderweitige Probleme mit dem encoden
                  von den sonderzeichen,
                  Nicht-UTF-8 wird durch dekoden ja auch sicherlich nicht zu UTF-8 ...
                  aber du sagtest selbst ein decoden/encoden/etc. würde gar nicht erst nötig sein,
                  Richtig, wenn du gleich konsequent UTF-8 verwendest.
                  irgendwie wiedersprichst du dir selbst.
                  Lustig, dass du jetzt derjenige bist, der das sagt.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Du hättest mir auch sagen könn welche Funktion von nöten
                    wäre, ich lese mich eh gern selbst durch um es zu kapieren

                    Habs nun mit htmlentities() gemacht, bzw. die Strings so zu
                    kodieren, und klappt auch alles wunderbar, hoffe das ist auch
                    das was du gemeint hattest.

                    Danke für die Geduld, mfg darki

                    Kommentar


                    • #11
                      Das ist natürlich nicht das, was ich gemeint habe.

                      Wozu unnötigerweise Sonderzeichen in HTML-Entities umschreiben - wenn es eine einfache Verwendung einer passenden Zeichenkodierung auch tut.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Um nicht unnötigerweise nen neuen Thread zu erstellen, benutz ich den mal weiter.

                        Habe ebenfalls Sonderzeichen im XML Dokument und trotz UTF-8 will SimpleXML da nicht mitmachen.

                        XML-Datei zum testen:

                        Code:
                        <?xml version = "1.0" encoding = "UTF-8"?>
                        <start>
                        
                            <bla zeichen = "bla ™"></bla>
                                    
                        </start>


                        Parserdatei:

                        PHP-Code:
                        <?php
                        $xml 
                        simplexml_load_file('test3.xml');
                        echo 
                        $xml->bla->attributes()->zeichen;
                          
                        ?>

                        So zb hier dieses Trademarkzeichen, ohne gehts Problemlos.

                        Oder muss man UTF-8 noch woanders angeben als nur im Header der XML Datei?

                        mfg


                        //edit: achja hier der Error, dort steht was von not-proper UTF-8, aber wo is der Fehler?

                        Warning: simplexml_load_file() [function.simplexml-load-file]: test3.xml:7: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0x99 0x22 0x3E 0x3C in /www/htdocs/w0080940/debugger2.php on line 2

                        Warning: simplexml_load_file() [function.simplexml-load-file]: <bla zeichen = "bla ™"></bla> in /www/htdocs/w0080940/debugger2.php on line 2

                        Warning: simplexml_load_file() [function.simplexml-load-file]: ^ in /www/htdocs/w0080940/debugger2.php on line 2

                        Fatal error: Call to a member function attributes() on a non-object in /www/htdocs/w0080940/debugger2.php on line 5

                        Zuletzt geändert von INC.; 14.03.2007, 18:40.

                        Kommentar


                        • #13
                          ist die xml-datei denn wirklich utf-8 kodiert?

                          Kommentar


                          • #14
                            Ich dachte bisher immer, sie wäre es wenn dort "encoding UTF-8" steht

                            Dann wird das wohl nicht der Fall sein. Es handelt sich um eine externe PHP-Datei, welche mir als deren Quelltext (Rechtsklick -> Quelltext anzeigen) den XML-Output anzeigt.

                            wie nun am besten Vorgehen? Evt. mit file_get_contents den Quelltext (sprich die XML Daten) aus dem PHP File holen, lokal aufm Server abspeichern lassen und dort als UTF-8 codieren? Oder gibts da was eleganteres...


                            //edit: weitere Frage: die obige Beispieldatei hatte ich ja nur zum testen erstellt, der Fehler war jedoch der gleiche. Diese Datei habe ich dann mal mit dem Editor geöffnet und als UTF 8 wieder abgespeichert (zuvor war es ANSI). Jetzt erzeugt SimpleXML keinen Fehler mehr, jedoch lautet die Ausgabe nun "â„¢" statt dem Trademark zeichen.
                            Zuletzt geändert von INC.; 14.03.2007, 19:19.

                            Kommentar


                            • #15
                              vielleicht solltest du dich darüber informieren, was eine kodierung überhaupt ist.

                              wieso externe datei? ich sehe in deinem beispiel, wie du 'test3.xml' anforderst. das ist eine lokale datei im dateisystem deines servers. wie kommt sie dahin?

                              Kommentar

                              Lädt...
                              X