Dee: Sonderzeichen in textNodes

Ich find keinen Weg, vielleicht kann mir da wer helfen??

Ich bastele meine XHTML-Seiten mit dem DOM-Modell in PHP5 zusammen. Das klappt auch allen. Aber ich erstelle Absätze die mehrere textNodes enthalten.

Beim Erstellen von textNodes mit createTextNode werden HTML-Sonderzeichen wie < oder & automatisch umgewandelt. Sonderzeichen wie ä oder ö bleiben aber erhalten... An den Stellen bricht die Ausgabe von saveXML() mit ner Warnung ab.

Wird der Text in den p-Elementen eingefügt kann das Ganze mit htmlentities() umgewandelt werden, bei textNodes ist das damit aber doppelt gemoppelt und es ensteht sowas wie &amp;uuml;...

Gibts da irgend ne Umgehung... Ich werd nämlich ganz langsam verrückt...

Danke schonmal! Dee.

  1. Liebe(r) Dee,

    Beim Erstellen von textNodes mit createTextNode werden HTML-Sonderzeichen wie < oder & automatisch umgewandelt. Sonderzeichen wie ä oder ö bleiben aber erhalten... An den Stellen bricht die Ausgabe von saveXML() mit ner Warnung ab.

    Ich verwende (noch) kein PHP5. Und mein PHP4 verwende ich ohne DOM. Aber ich stelle mir das mal so ähnlich wie das DOM in Javascript vor.

    Was hindert Dich, die Funktion createTextNode() "umzuprogrammieren"? Erstelle Doch eine Funktion namens "my_createTextNode()", in der Du per str_replace() (oder so ähnlich) die typisch deutschen Sonderzeichen durch ihre HTML-Entitäten ersetzt, um dann die echte createTextNode() aufzurufen?

    Das könnte dann in etwa so aussehen:

    function my_createTextNode($my_string)  
    {  
    $sonderzeichen = array ("ä", "Ä", "ö", "Ö", "ü", "Ü", "ß");  
    $ersetzung = array("&auml;", "&Auml;", "&ouml;", "&Ouml;", "&uuml;", "&Uuml;",  "&szlig;");  
      
    $korrigierter_string = str_replace($sonderzeichen, $ersetzung, $my_string);  
      
    createTextNode($korrigierter_string);  
    return;  
    }
    

    Habe den Code jetzt nicht überprüft, aber Du siehst, was ich meine. Ich habe mal in der Doku von PHP nach createTextNode gesucht. Dort heißt die Funktion zwar etwas anders, aber Du siehst ja das Wesentliche.

    Liebe Grüße aus Ellwangen,

    Felix Riesterer.

    1. Liebe(r) Dee,

      Ohne r ;)

      Was hindert Dich, die Funktion createTextNode() umzuprogrammieren"?

      createTextNode($korrigierter_string);

      Das war auch einer meiner ersten Ansätze, aber da passiert eben das was ich als doppelt gemoppelt bezeichnet hab.

      In dem string in dem die Umlaute ersetzt wurden ($korrigierter_string) ist dann beispielsweise '&ouml;' enthalten. Wird dies nun an die Funktion DOMDocument->createTextNode() übergeben ersetzt diese das _&_ in '&ouml;' durch '&amp;'. Dadurch entsteht '&amp;ouml;' was eben leider doppelt ersetzt ist...

      Liebe Grüße zurück aus Berlin. Dee.

      1. Liebe Dee,

        kannst Du nach createTextNode() auf die erzeugte TextNode "zugreifen"? Sollte bei einem DOM doch möglich sein! Dann sollte ja soetwas wie (ich denke jetzt wieder in Javascript) this.textNode.innerHTML = str_replace($sonderzeichen, $ersetzung, this.textNode); möglich sein...

        Liebe Grüße aus Ellwangen,

        Felix Riesterer.

        1. Auf den Inhalt des Textknotens kann man zwar zugreifen mit

          textNode->nodeValue.

          Aber die automatische Ersetzung der HTML-Sonderzeichen erfolgt wohl erst bei der Ausgabe, das heißt egal wann ich was im Knoteninhalt ersetze, die automatische Ersetzung ist erst danach und damit doppelt...

          Grüße. Dee.