Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: XML Problem

  1. #1
    Teeny
    Registriert seit
    30.05.2009
    Ort
    Mülheim
    Alter
    32
    Beiträge
    44
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard XML Problem

    Hallo leute stehe gerade vor ein riesen Problem !

    schreibe gerade einen chat und alle einträge macht ein PHP script,
    erst wollte ich den chat direkt mit Ajax auf die XML Datei zugreifen lassen aber weil ich vor der ausgabe bestimmte header senden muss wegen Catch Control usw. gebe ich die XML Datei mit PHP aus ohne iregend was zu rendern das script senden nur die benötigten header !

    leider mußte ich dann festellen, das wenn jemand ein html element in den chat eingibt die ich natürlich vor dem speichern in die xml datei escape werden die element wohl wegen Ajax trotzdem auf dem display angezeigt, obwohl die vor dem eintragen escaped wurden, jetzt weiß ich nicht wie ich diesen groben Fehler beseitigen soll ?

    ich brauch dabei unbedingt Hilfe !

    das escapen usw. macht meine PHP Klasse automatischen sobald eine Kind Klasse abgerufen wird !

    hier:

    PHP-Code:

        
    final private function _Input_($input)
        {
    $ereg FALSE;
            foreach(
    $input as $this->key => $this->value) {
                if(
    is_array($this->value)) {
                    
    self::_Input_($this->value);
                }else{
                    if(
    get_magic_quotes_gpc()){
                        
    $this->request[$this->key] = stripslashes($this->value);
                    }
                    
    $this->request[$this->key] = mysql_escape_string(htmlspecialchars($this->value));
                }
            }
            return 
    $this->request;
        } 
    die Codescnipsel der die einträge in die Xml Datei macht sieht so aus:

    PHP-Code:

        
    final public function update($s=0)
        {
            
    $morph = array();
            
    $b false;
            
    $i 0;
            
    $m 0;

            
    $p = !$s "../xml/main.xml" "../xml/list.xml";

            
    $xml simplexml_load_file($p);

            foreach(
    $xml->chat as $match) {
                if(!
    $b) {$m++;}else{break;}
                foreach(
    $match->attributes() as $room) {
                    if(
    $room == $this->request['room']) {
                        
    $b true;
                        break;
                    }
                }
            }

            switch(
    $s)
            {
                case 
    0:

                    if((!empty(
    $this->request['Nachricht'])) && (isset($_SESSION['user']))) {

                        
    $input $this->request['Nachricht'];

                        
    $newMsg $xml->chat[$m-1]->addChild("message"$input);
                        
    $newMsg->addAttribute("user"" ".$_SESSION['user'].": ");
                        
    $newMsg->addAttribute("ip"$_SESSION['ip']);
                        
    $newMsg->addAttribute("id"$_SESSION['id']);
                        
    $newMsg->addAttribute("time"'('.date("H:i:s").')');
                        
    $newMsg->addAttribute("font"$this->request['font']);
                        
    $newMsg->addAttribute("color"'#'.$this->request['color']);

                    }

                    
    $xml->asXML($p);

                break;

                case 
    1:

                    
    $gpath $_SESSION['gesch'] ? 'grafik/quader/boy.gif' 'grafik/quader/girl.gif' ;

                    
    $newMsg $xml->chat[$m-1]->addChild("user"" ".$_SESSION['user']);
                    
    $newMsg->addAttribute("id"$_SESSION['id']);
                    
    $newMsg->addAttribute("time"$_SESSION['id']);
                    
    $newMsg->addAttribute("ip"$_SESSION['ip']);
                    
    $newMsg->addAttribute("sex"$gpath);
                    
    $newMsg->addAttribute("st"'i');

                    
    $xml->asXML($p);

                break;

            }

            
    self::getAlert();

        } 
    Ich versteh absolute nicht wieso, also die daten stehen so in der XML Datei
    HTML-Code:
    <a href=\\"\\">huhu</a>
    dieses Element wird nach den abruf über Ajax als Link dargestellt !

    Danke, schon einmal !
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: XML Problem

    Machs doch so, speicher in eine geschützte Datei in die erste zeile den Autor und in die zweite den geschriebenen Text. Wenn jetzt ein Client über AJAX den neusten Chat-Stand abfragt, liest du mit einer eigenen PHP-Datei das beides aus und gibts dann z.B. sowas zurück:
    Code:
    <?xml version="1.0">
    <root>
     <author>Tobse</author>
     <text>Test</text>
    </root>
    Sp kannst du auch verhindern, dass nur eingeloggte member den Chat mitverfolgen können. Das mit dem &lt; ung &gt; kommt aus htmlspechialchars();.
    Mein Tipp ist aber, den Usern mit htmlentities(); das HTML-Schreiben zu verbieten, kann über <script>-Tags böse enden.
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  3. #3
    Teeny
    Themenstarter

    Registriert seit
    30.05.2009
    Ort
    Mülheim
    Alter
    32
    Beiträge
    44
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: XML Problem

    Hi, ich verbiete ja HTML, das Problem ist das auch wenn ich html escaped habe es trotzdem auf dem Bildschirm angezeigt wird, genau das soll es ja nicht, wie oben schon beschrieben ist jedes html element escaped worden bevor es in der XML datei gespeichert wurde weil ich eben html verbiete.

    Aber wenn jetzt ein Client mit ajax darauf zugreift zeigt der browser das html element das eigentlich escaped ist trotzdem als html an, das soll es ja nicht.

    Meine frage ist jetzt wie verhindere ich das ??

    Das was du geschrieben hast ist mir ja klar, und genau so mache ich das ja.

    Aber meine Frage war leider eine andere !

    Trotzdem Danke.

  4. #4
    der/die Göttliche Avatar von jojo87
    Registriert seit
    23.03.2007
    Ort
    Leipzig
    Alter
    30
    Beiträge
    3.131
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: XML Problem

    interessanter wäre der Schnipsel, der die Abfrage an das XML-Dokument macht und ausgibt.

  5. #5
    Teeny
    Themenstarter

    Registriert seit
    30.05.2009
    Ort
    Mülheim
    Alter
    32
    Beiträge
    44
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: XML Problem

    Hi,

    sorry hier der Code der die Ausgabe macht (Javascript):
    PHP-Code:

                
    case '1':

                    var 
    chatroom document.getElementById('room');

                    var 
    quader tmp['xml'].getElementsByTagName('quader');

                    var 
    display document.getElementById("ajax_1");

                    for(var 
    k=0quader.length ;k++) {

                        for(var 
    i=0quader[k].getElementsByTagName('chat').length ;i++)
                        {
                            
    chat quader[k].getElementsByTagName('chat')[i];

                            if(
    chat.getAttribute('room') == chatroom.value)
                            {
                                
    m_c chat.getElementsByTagName('message').length;

                                if((
    m_c 10) && (== 0)) { m_c-10; }

                                for(var 
    q=z<  m_c;q++)
                                {
                                    
    message chat.getElementsByTagName('message')[q];

                                    
    div document.createElement('div');

                                    
    user_info document.createElement('span');
                                    
    user_info.setAttribute('class''clock');
                                    
    user_info.innerHTML message.getAttribute('time');

                                    
    div.appendChild(user_info);

                                    
    user_name document.createElement('span');
                                    
    user_name.innerHTML message.getAttribute('user');

                                    
    div.appendChild(user_name);

                                    
    user_message document.createElement('font');
                                    
    user_message.setAttribute('face'message.getAttribute('font'));
                                    
    user_message.setAttribute('color'message.getAttribute('color'));
                                    
    user_message.innerHTML message.firstChild.nodeValue;

                                    
    div.appendChild(user_message);

                                    
    display.appendChild(div);

                                    
    scrollme();

                                    
    m_c;

                                }
                            }
                        }
                    }

                    
    getUserlist();

                break; 
    die neuen einträge fügt das Script nach und nach auf dem Bilschirm ein !

    Die Abfrage geschieht über Ajax das BasisScript :

    PHP-Code:

        
    function request()
        {
            if (
    window.XMLHttpRequest) { // Mozilla, Safari,...
                
    http_request = new XMLHttpRequest();
                if (
    http_request.overrideMimeType) {
                    
    http_request.overrideMimeType(pto);
                }
            } else if (
    window.ActiveXObject) { // IE
                
    try {
                    
    http_request = new ActiveXObject("Msxml2.XMLHTTP");
                } catch (
    e) {
                    try {
                        
    http_request = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (
    e) {}
                }
            }

            if (!
    http_request) {
                
    alert(
                    
    "Kann keine XMLHttp-Instanz erzeugen !"
                    
    );
                return 
    false;
            }

            
    http_request.onreadystatechange CatchReQ;
            
    http_request.open(methodeurltrue);
            
    http_request.send(body);

        }

        function 
    CatchReQ() {
            if (
    http_request.readyState == 4) {
                switch (
    http_request.status)
                {
                    case 
    200:

                        if(
    pto == 'text/xml') {

                            
    tmp['xml'] = http_request.responseXML;

                            
    window.setTimeout(moditimer);

                        }else{

                            
    tmp['text'] = http_request.responseText;

                            if(!
    m) {

                                
    window.setTimeout(moditimer);

                            }else{

                                
    document.getElementById(id);
                                
    c.innerHTML tmp['text'];

                            }

                        }

                        return 
    tmp;

                    break;

                    case 
    404:
                        
    alert(
                            
    'ERROR: 404; Seite nicht gefunden !'
                            
    );
                    break;

                    default:
                        
    alert(
                            
    'ERROR: Verstehe die Antwort vom Server nicht !'
                            
    );
                    break;
                }
            }

        } 
    Danke, schon einmal !

    P.S. Da ich bestimmte header brauch auch wenn die abfrage per ajax geschieht, läuft die abfrage nicht direkt auf das xml dokument sonder über php hier der schnippsel :

    PHP-Code:

    ob_start
    ();

        switch(
    $base->request[$base->param]) {

            case 
    1:
                
    $base->userinc();
            break;

            case 
    2:
                
    $base->update();
            break;
            case 
    3:
                
    base::p_header(10);
                
    base::p_header('xml'0);

                
    $base->output implode(" "file('../xml/list.xml'));
            break;
            default:
                
    $base->job();

                
    base::p_header(10);
                
    base::p_header('xml'0);

                
    $base->output implode(" "file('../xml/main.xml'));
            break;

        }

    echo 
    $base->output;

    ob_end_flush(); 
    Geändert von webcoolcity (10.01.2010 um 16:45 Uhr)

  6. #6
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: XML Problem

    Das mein ich, ohne PHP könnte man ja einfah die Datei anschaun. Wenn du anstatt die Usereingabe zu escapen einfach htmlentities(); darauf anwendest, hat sich dein HTML-Problem.
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  7. #7
    Teeny
    Themenstarter

    Registriert seit
    30.05.2009
    Ort
    Mülheim
    Alter
    32
    Beiträge
    44
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: XML Problem

    Zitat Zitat von Tobse Beitrag anzeigen
    Das mein ich, ohne PHP könnte man ja einfah die Datei anschaun. Wenn du anstatt die Usereingabe zu escapen einfach htmlentities(); darauf anwendest, hat sich dein HTML-Problem.

    so ein quatsch, du verstehst gar nicht worum es hier geht !

    zum 3. mal, warum sollte ich die zeichen die ich gefiltert habe wieder in html umwandeln wenn ich das doch verbiete ! , wenn du das meinst alles andere ist identisch mit htmlspecialchars(); die anführungszeichen escaped doch get_magic_quotes_gpc() voll automatisch !

    Lies doch mal -> http://php.net/manual/de/function.htmlentities.php


    Frage an die anderen könnte es sein wenn ich den zeichensatzt ändere in utf-8 anstatt iso-blabla das es dass Problem behebt ?
    Geändert von webcoolcity (10.01.2010 um 17:26 Uhr)

  8. #8
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: XML Problem

    Tut mir leid, aber in dem PHP Buch das ich gelesen habe steht, das htmlentities(); alle HTML-Elemente entfernt. Nimm strip_tags();
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  9. #9
    Teeny
    Themenstarter

    Registriert seit
    30.05.2009
    Ort
    Mülheim
    Alter
    32
    Beiträge
    44
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: XML Problem

    Er entfernt die ja nicht er wandelt die sgml tags in steuerzeichen um so das die elemente vom browser nicht interpretiert sondern nur angezeigt werden.

    striptags entfernt anführungszeichen ! mein problem hat damit (serverseitig) nichts zu tuhen sondern der XML Parser vom Browser interpretiert den Zeichnsatz falsch !

    Du solltest dich noch einmal mit escape,zeichensatz und steuerzeichen auseinnandersetzen !

  10. #10
    Kaiser(in)
    Registriert seit
    29.03.2009
    Ort
    1011 1111 1011 WorldWideWeb
    Beiträge
    2.439
    Danke
    2
    Bekam 6 mal "Danke" in 6 Postings

    Standard AW: XML Problem

    Was fürn Witz! hier, das hab ich lokal getestet:
    PHP-Code:
    <?php
    $string
    ="Das ist kein HTML.\n<a>Das ist HTML</a>";
    echo 
    strip_tags($string);
    ?>
    und das Hat der Browser angezeigt:
    Zitat Zitat von Mozilla Firefox
    Das ist kein HTML. Das ist HTML
    und das Stand im Quellcode:
    Zitat Zitat von Quellcode
    Das ist kein HTML.
    Das ist HTML
    Löst das jetzt dein Problem? Wenn nicht dann bin ich draußen.
    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.
    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •