Hobbycoder: xml CDATA

Hallo

ich kämpf seit 2 Tagen mit einem ernsthaften Problem und hoffe daa mir vllt hier jemand weiterhelfen kann..
ich will meine website 2 sprachig machen, bzw das ist mir auch schon gelungen, dazu hab ich ne XML datei die die deutschen und englischen inhalte bereit hält, und lese diese mit php aus...

XML:
<title>
   <text>
    <deu><![CDATA[Galerie]]></deu>
    <eng><![CDATA[Gallery]]></eng>

php:
if ($lang == "deu"){
  echo $xml->title[0]->text[0]->deu[0];
  } else {
  echo $xml->title[0]->text[0]->eng[0];
  }

das klappt soweit auch 100%, in größeren Textbereichen hab ich dann bei deutsch natürlich sonderzeichen, bzw teilweise auch links mit in der xml, sodass ich die grundsätzlich alle mit <![CDATA[Inhalt]]> umrandet hab das das ganze auch funktioniert...geht auch noch alles ohne stress...

allerdings wollt ich jetzt gern noch ne art mini cms einbauen, login usw klappt schon, nur wenn ich jetzt einen cdata bereich auslese, dann kommt der ja ohne die cdata, und wenn ich den dann erneut speichern will speichert er ihn ohne cdata und sieht dann so aus:

<deu>Galerie</deu>

in dem fall kein problem, wenn da allerdings n üö oder anderes sonderzeichen drin ist bringt er natürlich fehlermeldungen...

Meine Frage ist nun, ist es irgendwie möglich die cdata "unberührt" zu lassen beim speichern?

Hab auch schon versucht sie nachträglich im speichervorgang durch:

$xmlobj[0]->{$xmlnode} = "<![CDATA[".htmlspecialchars($xmlvalue)."]]>"

wieder anzufügen, aber dann wandelt er mir die in der xml zu zB:

<deu>&amp;lt;![CDATA[Impressum]]&amp;gt;</deu>

würd mir ja schon genügen da n grüßer und n kleiner zeichen aus dem &amp;lt; zu bekommen...kriegs aber leider nicht hin...

wär echt dankbar für nen tip wies ichs hinkriegen kann, oder wo ichs nachlesen kann wär auch schon was, irgendwie scheint im gnazen netz der fall nicht beschrieben zu sein, oder ich formulier die suche falsch...

  1. Hi,

    das klappt soweit auch 100%, in größeren Textbereichen hab ich dann bei deutsch natürlich sonderzeichen, bzw teilweise auch links mit in der xml,

    Warum, was haben Links in einer Übersetzungstabelle verloren?
    Dann musst du ja jedes Mal an die Übersetzungstabelle ran, wenn sich bspw. das Linkziel ändern würde … ungut.

    Lege den Linktext als eigenes zu übersetzendes Datum ab.
    Wenn sich die Position des Links im „übergeordneten“ Text in einer anderen Sprachversion ändern kann - dann arbeite mit Platzhaltern. Siehe sprintf für ein Beispiel, wie man damit umgehen könnte.

    wenn da allerdings n üö oder anderes sonderzeichen drin ist bringt er natürlich fehlermeldungen...

    Nein, alles andere als „natürlich“.
    Im Gegenteil, *natürlich* kann XML mit deutschen Umlauten umgehen, wenn du eine passende Zeichenkodierung verwendest.

    Dein Problem ist mit der vorliegenden Beschreibung nicht wirklich nachvollziehbar. (Fehlermeldungen nur nebulös zu erwähnen, anstatt sie im Wortlaut zu benennen, ist keine sinnvolle Art, ein Problem zu beschreiben.)

    Ich kann nur vermuten, dass deine „Umlaute“ gar keine Umlaute in Form der entsprechenden *Zeichen* sind, sondern dass du HTML-Entities stattdessen verwendest. Falls ja, solltest du diesen Mangel als allererstes abstellen - unter Verwendung einer geeigneten Zeichenkodierung gibt es heutzutage keinerlei plausiblen Grund mehr dafür, Umlaute als Entities zu notieren/speichern/auszugeben.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Hallo

      erstmal danke für die schnelle antwort!

      Hi,

      das klappt soweit auch 100%, in größeren Textbereichen hab ich dann bei deutsch natürlich sonderzeichen, bzw teilweise auch links mit in der xml,

      Warum, was haben Links in einer Übersetzungstabelle verloren?
      Dann musst du ja jedes Mal an die Übersetzungstabelle ran, wenn sich bspw. das Linkziel ändern würde … ungut.

      Lege den Linktext als eigenes zu übersetzendes Datum ab.
      Wenn sich die Position des Links im „übergeordneten“ Text in einer anderen Sprachversion ändern kann - dann arbeite mit Platzhaltern. Siehe sprintf für ein Beispiel, wie man damit umgehen könnte.

      ok, werd ich mir mal ansehn, aber ist mir momentan nicht wirklich wichtig, das funktioniert ja alles so wie es soll..will damit erreichen das ich sowohl das ziel als auch die benennung des links in einem arbeitsvorgang erledigen kann, bzw 2 für 2 sprachen

      wenn da allerdings n üö oder anderes sonderzeichen drin ist bringt er natürlich fehlermeldungen...

      Nein, alles andere als „natürlich“.
      Im Gegenteil, *natürlich* kann XML mit deutschen Umlauten umgehen, wenn du eine passende Zeichenkodierung verwendest.

      das hört sich interessant an, da hab ich wohl eh ein kleines verständnisproblem..

      <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

      also ich denk mal meine kodierung ist iso-8859-1...und wenn ich in die tabelle schau find ich da weder öäü noch <>.. ^^ da sollte wohl der hebel sein an dem ich ansetzen muss..danke für den tip

      Dein Problem ist mit der vorliegenden Beschreibung nicht wirklich nachvollziehbar. (Fehlermeldungen nur nebulös zu erwähnen, anstatt sie im Wortlaut zu benennen, ist keine sinnvolle Art, ein Problem zu beschreiben.)

      Ich kann nur vermuten, dass deine „Umlaute“ gar keine Umlaute in Form der entsprechenden *Zeichen* sind, sondern dass du HTML-Entities stattdessen verwendest. Falls ja, solltest du diesen Mangel als allererstes abstellen - unter Verwendung einer geeigneten Zeichenkodierung gibt es heutzutage keinerlei plausiblen Grund mehr dafür, Umlaute als Entities zu notieren/speichern/auszugeben.

      MfG ChrisB

      ich benutz keine entities, aber die htmlspecialchars um eingegebene daten zu filtern.

      zu den kodierungen hätt ich allerdings noch ne frage, müssen meine html dateien die gleiche kodierung haben wie meine sml datei, und klappt das dann auch auf anderen browsern, zB aus amerika, nicht das die ne andere kodierug eingestellt haben und dann meine fehlerhaft angezeigt wird?

      1. Hi,

        <?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
        also ich denk mal meine kodierung ist iso-8859-1...

        Die Kodierungsangabe ist zumindest ISO-8859-1. Ob die Kodierung zur Kodierungs-Angabe paßt, ist eine andere Frage.

        und wenn ich in die tabelle schau find ich da weder öäü noch <>..

        Was auch immer Du da angeschaut hast: wenn keine deutschen Umlaute und kein <> drin ist, war es keine ISO-8859-1-Zeichentabelle.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  2. Hi!

    in dem fall kein problem, wenn da allerdings n üö oder anderes sonderzeichen drin ist bringt er natürlich fehlermeldungen...

    Wer ist "er"? Und warum soll es natürlich sein, Fehlermeldungen zu bringen? In welcher Situation überhaupt und bei welchen Werten? Die Standard-Zeichenkodierung von XML ist UTF-8, damit kommen alle aktuellen Systeme sehr gut zurecht. Selbst PHP bietet in einigen Funktionen UTF-8-Support an.

    Meine Frage ist nun, ist es irgendwie möglich die cdata "unberührt" zu lassen beim speichern?

    Du meinst, ein CData-Element einzufügen - nicht mit SimpleXML. Dein Problem lässt sich jedoch ohne CData und mit UTF-8 lösen.

    Hab auch schon versucht sie nachträglich im speichervorgang durch:
    $xmlobj[0]->{$xmlnode} = "<![CDATA[".htmlspecialchars($xmlvalue)."]]>"
    wieder anzufügen, aber dann wandelt er mir die in der xml zu zB:
    <deu>&amp;lt;![CDATA[Impressum]]&amp;gt;</deu>
    würd mir ja schon genügen da n grüßer und n kleiner zeichen aus dem &amp;lt; zu bekommen...kriegs aber leider nicht hin...

    Wenn du SimpleXML Werte übergibst, müssen diese im Rohformat sein. Die XML-gerechte Behandlung übernimmt es selbst.

    Lo!

    1. Hi!

      in dem fall kein problem, wenn da allerdings n üö oder anderes sonderzeichen drin ist bringt er natürlich fehlermeldungen...

      Wer ist "er"? Und warum soll es natürlich sein, Fehlermeldungen zu bringen? In welcher Situation überhaupt und bei welchen Werten? Die Standard-Zeichenkodierung von XML ist UTF-8, damit kommen alle aktuellen Systeme sehr gut zurecht. Selbst PHP bietet in einigen Funktionen UTF-8-Support an.

      ER ist natürlich mein brotkasten..und da ich kein profi bin ist es eine seiner hauptaufgaben fehlermeldungen zu bringen ;-)
      nun, ich hab mir halt im netz n tutorial gesucht bei dem man xml dateien erstellt und da war 8859-1 angegeben was ich halt dann auch so übernommen habe.

      Meine Frage ist nun, ist es irgendwie möglich die cdata "unberührt" zu lassen beim speichern?

      Du meinst, ein CData-Element einzufügen - nicht mit SimpleXML. Dein Problem lässt sich jedoch ohne CData und mit UTF-8 lösen.

      nur ist die frage wie, hab jetzt mein xml file geändert:

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

      sobald ich dann das cdata tag vor nem eintrag wegmache kommen wieder fehlermeldungen, zB:

      language.xml:55: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xD6 0x66 0x66 0x6E in

      Hab auch schon versucht sie nachträglich im speichervorgang durch:
      $xmlobj[0]->{$xmlnode} = "<![CDATA[".htmlspecialchars($xmlvalue)."]]>"
      wieder anzufügen, aber dann wandelt er mir die in der xml zu zB:
      <deu>&amp;lt;![CDATA[Impressum]]&amp;gt;</deu>
      würd mir ja schon genügen da n grüßer und n kleiner zeichen aus dem &amp;lt; zu bekommen...kriegs aber leider nicht hin...

      Wenn du SimpleXML Werte übergibst, müssen diese im Rohformat sein. Die XML-gerechte Behandlung übernimmt es selbst.

      sorry, aber weiß nicht im geringsten was dieser satz mir sagen soll :((
      naja, auf jeden fall danke für die mühe...

      Lo!

      1. Hi!

        language.xml:55: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xD6 0x66 0x66 0x6E in

        Dann mach bitte "proper UTF-8". Alles andere macht nur Ärger beim Umgang mit XML-Funktionen. Am besten gleich die gesamte Verarbeitungskette auf UTF-8 umstellen.

        Wenn du SimpleXML Werte übergibst, müssen diese im Rohformat sein. Die XML-gerechte Behandlung übernimmt es selbst.
        sorry, aber weiß nicht im geringsten was dieser satz mir sagen soll :((

        Rohformat sind reine Daten ohne irgendwelche Mskierungen für irgendwelche Kontexte. Also < ist Rohformat, &lt; ist die makierte Form für den XML-Kontext.

        Lo!

        1. Hi!

          language.xml:55: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xD6 0x66 0x66 0x6E in

          Dann mach bitte "proper UTF-8". Alles andere macht nur Ärger beim Umgang mit XML-Funktionen. Am besten gleich die gesamte Verarbeitungskette auf UTF-8 umstellen.

          Wenn du SimpleXML Werte übergibst, müssen diese im Rohformat sein. Die XML-gerechte Behandlung übernimmt es selbst.
          sorry, aber weiß nicht im geringsten was dieser satz mir sagen soll :((

          Rohformat sind reine Daten ohne irgendwelche Mskierungen für irgendwelche Kontexte. Also < ist Rohformat, &lt; ist die makierte Form für den XML-Kontext.

          Lo!

          so, jetzt funktioniert überhaupt nichts mehr, und das was anfangs ging geht auch nicht mehr da das ganze dann nicht mehr so auf meiner website ankommt wie es vorher ankam...muss ich jetzt wegen einem falsch interpretierten, bzw 2, zeichen meinen ganzen code, 17 websites und ne riesen xml datei komplett umschreiben bzw abändern?

          ich will doch letztlich nur das in meine ursprungsxml mit ISO-8859-1 anstatt &lt ein < und anstatt &;lt; ein > eingefügt wird, ist das denn nicht irgendwie möglich? kann man da keine regel schreiben, wenn das kommt, setze das, also wenn mir meine savexml function &lt schickt, schreib < hin?

          1. Hi,

            so, jetzt funktioniert überhaupt nichts mehr, und das was anfangs ging geht auch nicht mehr da das ganze dann nicht mehr so auf meiner website ankommt wie es vorher ankam...muss ich jetzt wegen einem falsch interpretierten, bzw 2, zeichen meinen ganzen code, 17 websites und ne riesen xml datei komplett umschreiben bzw abändern?

            Wenn du bisher mit ISO-8895-1 als Zeichenkodierung gearbeitet hast, dann kannst du auch dabei bleiben - auch diese Kodierung kennt deutsche Umlaute.

            ich will doch letztlich nur das in meine ursprungsxml mit ISO-8859-1 anstatt &lt ein < und anstatt &;lt; ein > eingefügt wird, ist das denn nicht irgendwie möglich?

            Wie dedlfix schon sagte - wenn du einfach nur einen Textknoten erzeugst, kümmert sich SimpleXML schon selber darum.

            Wenn du das als Inhalt eines Elementes haben willst - dann benutze doch die addChild-Methode.

            MfG ChrisB

            --
            RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
            1. Hi,

              so, jetzt funktioniert überhaupt nichts mehr, und das was anfangs ging geht auch nicht mehr da das ganze dann nicht mehr so auf meiner website ankommt wie es vorher ankam...muss ich jetzt wegen einem falsch interpretierten, bzw 2, zeichen meinen ganzen code, 17 websites und ne riesen xml datei komplett umschreiben bzw abändern?

              Wenn du bisher mit ISO-8895-1 als Zeichenkodierung gearbeitet hast, dann kannst du auch dabei bleiben - auch diese Kodierung kennt deutsche Umlaute.

              ok

              ich will doch letztlich nur das in meine ursprungsxml mit ISO-8859-1 anstatt &lt ein < und anstatt &;lt; ein > eingefügt wird, ist das denn nicht irgendwie möglich?

              Wie dedlfix schon sagte - wenn du einfach nur einen Textknoten erzeugst, kümmert sich SimpleXML schon selber darum.

              Wenn du das als Inhalt eines Elementes haben willst - dann benutze doch die addChild-Methode.

              wann hat er das wie gesagt?
              und ja, ich hätte gern als inhalt meines elementes <eng></eng>

              <![CDATA[inhalt]]>

              also:

              <eng><![CDATA[inhalt]]></eng>

              nur sobald ich < oder > in meine xml schrieben lasse kommt da nur &lt; oder &gt; an, was dann beim nächsten auslesen nicht mehr als korrektes cdataelement erkannt wird:

              <eng>&lt;![CDATA[inhalt]]&gt;</eng>

              nebenbei bemerkt, hab meine website und das xml file als utf-8 codiert und er übergibt mir immer noch &lt; und &gt; , also das hilft mir nicht wirklich weiter :(

              Das ist die funtion zum ändern der xml werte

              function changeXMLvalue($xmlfile, $xmlpath, $xmlnode, $xmlvalue=''){
                $xmlobj = $GLOBALS['xmlObjects'][$xmlfile]->xpath($xmlpath);
                $xmlobj[0]->{$xmlnode} = htmlspecialchars($xmlvalue);
              }

              und die speichert das file

              function saveXMLfile($xmlfile){
                if(!isset($GLOBALS['xmlObjects'][$xmlfile])){
                  trigger_error('Die Datei "'.$xmlfile.'" wurde nie geöffnet.');
                  return false;
                }
                $xmlFileValue = $GLOBALS['xmlObjects'][$xmlfile]->asXML();
                file_put_contents($xmlfile, $xmlFileValue);
              }

              ich bin auch ganz ehrlich, ich hab keine ahnung davon, n bissl von php, html und css, ganz wenig js, aber das ist das erste mal das ich xml probier, hab mir das alles in 3 tagen aus dem netz gedragt und dropt und irgendwie zum laufen gekriegt, bin ja begeistert das ich soweit gekommen bin, nur die beiden blöden < oder > zeichen bringen mich um den verstand..

              wenn ich addchild nehme, bzw mir dazu infos besorg, wie gross ist die wahrschienlichkeit das da dann die richtigen zeichen übrgeben werden?

              vielen dank nochmal, der Fehlerteufel...

              MfG ChrisB

              1. Hi,

                und ja, ich hätte gern als inhalt meines elementes <eng></eng>

                <![CDATA[inhalt]]>

                also:

                <eng><![CDATA[inhalt]]></eng>

                Warum soll es denn unbedingt eine CDATA-Section sein?

                < und > zu maskieren innerhalb eines *normalen* Textknotens reicht doch idR. vollkommen aus.

                nur sobald ich < oder > in meine xml schrieben lasse kommt da nur &lt; oder &gt; an, was dann beim nächsten auslesen nicht mehr als korrektes cdataelement erkannt wird:

                <eng>&lt;![CDATA[inhalt]]&gt;</eng>

                SimpleXML kann nicht wissen, dass du "<![CDATA[inhalt]]>" *nicht* als reinen Text verstanden haben willst an der Stelle, wo du ihn ins Element reinschreibst.
                Es geht also davon aus, dass du es als Text meinst, die reinen Zeichen <, !, C, D etc. - und dann *muss* es das < als &lt; maskiert einsetzen, um gültiges HTML zu erzeugen.

                Aber wie du siehst, geht es mit den Zeichen < und > schon von selber korrekt um - also wozu noch unbedingt CDATA verwenden?

                nebenbei bemerkt, hab meine website und das xml file als utf-8 codiert und er übergibt mir immer noch &lt; und &gt; , also das hilft mir nicht wirklich weiter

                Ohne sich wenigstens mal mit den Grundlagen der Thematik Zeichenkodierung beschäftigt zu haben, wild damit herum zu probieren, kann auch kaum weiter helfen.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
                1. Hi,

                  und ja, ich hätte gern als inhalt meines elementes <eng></eng>

                  <![CDATA[inhalt]]>

                  also:

                  <eng><![CDATA[inhalt]]></eng>

                  Warum soll es denn unbedingt eine CDATA-Section sein?

                  weil ich dann zeilenumbrüche, links etc übergeben kann.

                  < und > zu maskieren innerhalb eines *normalen* Textknotens reicht doch idR. vollkommen aus.

                  das ist eigentlich alles was ich wissen will, wie maskier ich mein < und > so dass das es in meiner xml datei ankommt?

                  nur sobald ich < oder > in meine xml schrieben lasse kommt da nur &lt; oder &gt; an, was dann beim nächsten auslesen nicht mehr als korrektes cdataelement erkannt wird:

                  <eng>&lt;![CDATA[inhalt]]&gt;</eng>

                  SimpleXML kann nicht wissen, dass du "<![CDATA[inhalt]]>" *nicht* als reinen Text verstanden haben willst an der Stelle, wo du ihn ins Element reinschreibst.
                  Es geht also davon aus, dass du es als Text meinst, die reinen Zeichen <, !, C, D etc. - und dann *muss* es das < als &lt; maskiert einsetzen, um gültiges HTML zu erzeugen.

                  ja, aber gibt es deine keine methode dem xml zu sagen lass die finger von diesem < oder >, in php geht es doch auch mit backslash zB:

                  echo "<input name="name_$i" type="text" va..

                  Aber wie du siehst, geht es mit den Zeichen < und > schon von selber korrekt um - also wozu noch unbedingt CDATA verwenden?

                  weil es ohne cdata nicht geht! soabld ich nen <a href  /> oder nen p, h1 oder was auch immer tag öffne denkt der xml ohne cdata ich würd nen xmltag öffnen, will ich aber nicht, deshalb cdata, ich hab in meiner index.php nur noch den div tag, den ich im css grafisch formatier, und der gesamte inhalt steht in meiner xml, mit den tags

                  nebenbei bemerkt, hab meine website und das xml file als utf-8 codiert und er übergibt mir immer noch &lt; und &gt; , also das hilft mir nicht wirklich weiter

                  Ohne sich wenigstens mal mit den Grundlagen der Thematik Zeichenkodierung beschäftigt zu haben, wild damit herum zu probieren, kann auch kaum weiter helfen.

                  MfG ChrisB

                  naja, ich bin auf dem weg weit gekommen ^^ und ich werd auch noch dieses problem lösen, irgendwie werd ich es schaffen ein  < und > zeichen in meine xml reinzubekommen, es muss doch irgendwie möglich sein von extern über php nen cdata tag in ne xml datei reinzubekommen...a prospos, stelln wir die frage doch mal anders, wie kann ich denn irgendeinen tag hinzufügen? der muss dann ja auch mit  < bzw > ausgestattet sein die von xml ja auch nicht umgeschrieben werden dürfen da es sich ja sonst selbst nicht mehr versteht :P

                  oder kann ich dem xml file irgendwie sagen das es grundsätzlich IMMER cdata tags setzen soll..es kann doch einfach nicht so kompliziert sein, und wenn doch gibt es da, zumindest meiner meinung nach, zwingend nachholbedarf

                  mfg

                  1. so, hat sich erledigt, alles gar nicht so schwer, auch ohne Zeichenkodierung!

                  2. Hi!

                    Warum soll es denn unbedingt eine CDATA-Section sein?
                    weil ich dann zeilenumbrüche, links etc übergeben kann.

                    CDATA geht nunmal mit SimpleXML nicht. Aber:

                    < und > zu maskieren innerhalb eines *normalen* Textknotens reicht doch idR. vollkommen aus.
                    das ist eigentlich alles was ich wissen will, wie maskier ich mein < und > so dass das es in meiner xml datei ankommt?

                    Gar nicht. Das macht SimpleXML für dich. Du übergibst nur Rohdaten und zwar UTF-8-kodiert. Was anderes kann SimpleXML auch nicht. Und das kommt dann auch wieder als UTF-8 raus. Wenn du nicht ständig zwischen UTF-8 und dem von die ansonsten verwendetem ISO-8859-1 hin- und herkodieren willst, empfahl ich dir, komplett auf UTF-8 umzusteigen.

                    ja, aber gibt es deine keine methode dem xml zu sagen lass die finger von diesem < oder >, in php geht es doch auch mit backslash zB:

                    Nicht mit SimpleXML.

                    Aber wie du siehst, geht es mit den Zeichen < und > schon von selber korrekt um - also wozu noch unbedingt CDATA verwenden?
                    weil es ohne cdata nicht geht! soabld ich nen <a href  /> oder nen p, h1 oder was auch immer tag öffne denkt der xml ohne cdata ich würd nen xmltag öffnen,

                    Ja, weil du die Zeichen mit Sonderbedeutung in XML (<, >, & sowie teilweise " und ') nicht XML-gerecht notierst. Mit CDATA kann man sich das sparen, ohne nicht.

                    will ich aber nicht, deshalb cdata,

                    Kein Problem, wenn du das zu Fuß einträgst. SimpleXMK kann CDATA nicht (wie gesagt) und behandelt dafür die XML-Sonderzeichen anderweitig, dafür aber korrekt und ohne CDATA-Section. Mit den vielen &lt;&gt; drin lässt sich das schwerer lesen, aber wenn dich das stört, darfst du eben kein SimpleXML nehmen. Message angekommen? SimpleXML heißt nicht umsonst "Simple".

                    nebenbei bemerkt, hab meine website und das xml file als utf-8 codiert und er übergibt mir immer noch &lt; und &gt; , also das hilft mir nicht wirklich weiter

                    SimpleXML wandelt die XML-gerecht notierten Inhalte in Rohdaten zurück, wenn man Inhalte abfragt. Auch die DOM-Extension arbeitet so. Wenn du HTML-Code in einer XML-Datei speichern willst und dieser dort korrekt eingefügt ist (roh im CDATA-Bereich oder maskiert außerhalb), dann bekommst du den stets in Rohform wieder raus. Wenn du selbst maskierst, wird's Mist.

                    naja, ich bin auf dem weg weit gekommen ^^ und ich werd auch noch dieses problem lösen, irgendwie werd ich es schaffen ein  < und > zeichen in meine xml reinzubekommen, es muss doch irgendwie möglich sein von extern über php nen cdata tag in ne xml datei reinzubekommen

                    Entweder du lässt SimpleXML einfach machen oder - wenn du die Feinheiten selbst kontrollieren willst - nimmst die DOM-Extension. Die ist aber nicht mehr simpel zu bedienen.

                    ...a prospos, stelln wir die frage doch mal anders, wie kann ich denn irgendeinen tag hinzufügen? der muss dann ja auch mit  < bzw > ausgestattet sein die von xml ja auch nicht umgeschrieben werden dürfen da es sich ja sonst selbst nicht mehr versteht :P

                    Schieb Rohdaten rein und du bekommst Rohdaten raus. Reinschauen brauchst du nicht unbedingt - SimpleXML weiß was es tut.

                    oder kann ich dem xml file irgendwie sagen das es grundsätzlich IMMER cdata tags setzen soll..es kann doch einfach nicht so kompliziert sein, und wenn doch gibt es da, zumindest meiner meinung nach, zwingend nachholbedarf

                    Nicht mit SimpleXML. Das ist für simples XML-Handling ausgelegt, CDATA gehört nicht mehr dazu.

                    Lo!

                    1. ja, dnake hat siuch schon erledigt, hab dom auch allein gefunden, zeichenkodierung mach ich nicht anders, hilft mir nicht weiter wenn ich links und p/h1 etc tags in meiner cdata hab, die geben dann eh fehler aus!

            2. @@ChrisB:

              nuqneH

              Wenn du bisher mit ISO-8895-1 als Zeichenkodierung gearbeitet hast, dann kannst du auch dabei bleiben - auch diese Kodierung kennt deutsche Umlaute.

              Diese Codierung kennt aber keine Gedankenstriche* – du scheinbar auch nicht.

              Wie man jemandem zur Verwendung einer alterümlichen Zeichencodierung raten kann, erschließt sich mir nicht.

              Qapla'

              * und auch nicht andere benötigte Zeichen wie Anführungszeichen

              --
              Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
              (Mark Twain)
              1. Hi,

                Wenn du bisher mit ISO-8895-1 als Zeichenkodierung gearbeitet hast, dann kannst du auch dabei bleiben - auch diese Kodierung kennt deutsche Umlaute.

                Diese Codierung kennt aber keine Gedankenstriche* – du scheinbar auch nicht.

                Wie man jemandem zur Verwendung einer alterümlichen Zeichencodierung raten kann, erschließt sich mir nicht.

                Mach dir etwas weniger Gedanken über Striche – dann erkennst du vielleicht den Unterschied zwischen dem Rat zu einer Neu-Verwendung und einer Beibehaltung.

                Und btw., ich habe gerade mein Windows neu installiert und dabei auch mein Tastatur-Layout aufgemotzt – bis die Verwendung der entsprechenden Tastenkombinationen wirklich „sitzt“, kann es noch ein bisschen dauern.

                MfG ChrisB

                --
                RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        2. Hi!

          language.xml:55: parser error : Input is not proper UTF-8, indicate encoding ! Bytes: 0xD6 0x66 0x66 0x6E in

          Dann mach bitte "proper UTF-8". Alles andere macht nur Ärger beim Umgang mit XML-Funktionen. Am besten gleich die gesamte Verarbeitungskette auf UTF-8 umstellen.

          Wenn du SimpleXML Werte übergibst, müssen diese im Rohformat sein. Die XML-gerechte Behandlung übernimmt es selbst.
          sorry, aber weiß nicht im geringsten was dieser satz mir sagen soll :((

          Rohformat sind reine Daten ohne irgendwelche Mskierungen für irgendwelche Kontexte. Also < ist Rohformat, &lt; ist die makierte Form für den XML-Kontext.

          Lo!

          ich kann noch nicht mal mehr nen zeilenumbruch übergeben, mit cdata funktioniert das einwandfrei, so bringt er mir direkt ne fehlermeldung

          danke trotzdem für die hilfe, sicherlich bin ich an dem problem wohl selbst schuld, da man, wenn man sich auskennt, das ganze anders regeln würde. aber bevor ich jetzt alles umschreib pfeif ich lieber drauf und mach änderungen eben in der xml datei, so wichtig ist mir das auch nicht mit der cms funktion. beim nächsten projekt werd ich dann von vorne herein mal in utf-8 arbeiten und besser vorbereitet an das problem herangehn

          danke, und viel spaß noch hier

      2. Hi,

        nur ist die frage wie, hab jetzt mein xml file geändert:
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        Wenn Du auf ein gelbes Auto draufschreibst "Dieses Auto ist blau", ist das Auto immer noch gelb.

        Die Kodierungs-Angabe muß zur tatsächlichen Kodierung passen.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      3. @@Hobbycoder:

        nuqneH

        nur ist die frage wie, hab jetzt mein xml file geändert:
        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

        Den zweiten Schritt vor dem ersten gemacht? [qa-changing-encoding]

        Unter den Literaturhinweisen in diesem Artikel findest du auch ein Tutorial zu Zeichencodierungen, worin wiederum andere lesenwerte Artikel verlinkt sind. (Zufälligerweise gibt’s das alles sogar auf deutsch. ;-))

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
  3. @@Hobbycoder:

    nuqneH

    ich will meine website 2 sprachig machen, bzw das ist mir auch schon gelungen,

    An Sprachvereinbarung hast du dabei gedacht?

    dazu hab ich ne XML datei die die deutschen und englischen inhalte bereit hält, und lese diese mit php aus...

    Mir ist schleierhat, warum du die Texte im XML-Format ablegst und nicht gleich in PHP.

    $texte = array(  
      'de' => array(  
        'Galerie' => 'Galerie',),  
      'en' => array(  
        'Galerie' => 'Gallery',),  
    );
    

    if ($lang == "deu"){
      echo $xml->title[0]->text[0]->deu[0];
      } else {
      echo $xml->title[0]->text[0]->eng[0];
      }

    Das vereinfacht sich dann zu echo $texte[$lang]['Galerie'];

    Sich beim Abruf des betreffenden Texts auf dessen Position in der Datei zu verlassen, ist wohl auch keine gute Idee.

    Ich würde auch nicht irgendwelche Sprachkürzel verwenden, sondern ausschließlich die aud dem IANA-Register.

    Qapla'

    --
    Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
    (Mark Twain)