Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    conversione carattere "&" ad stringa a xml

    Buongiorno programamtori,
    Ho un problema con il passaggio del carattere "&" da una variabile php di tipo stringa al documento xml,
    queste sono le prove che ho fatto fin ora ma non hanno portato a nulla, invece della & sull' xml esce la sua codifica di carattere : &


    codice:
    
    $doc = new DOMDocument('1.0', 'utf-8');
    $doc->formatOutput = true;
    $r = $doc->createElement("Users");
    $doc->appendChild($r);
    
    
    
    
    $b = $doc->createElement("Users");
    $UserSdio="pippo & pluto";
    $UserSdio1= decode_entities( $UserSdio);
    $UserSdio2=htmlspecialchars_decode($UserSdio, ENT_XHTML);
    $UserSdio3= utf8_decode( $UserSdio);
    $UserSdio4=philsXMLClean($UserSdio);
    $UserSdio5=rawurlencode($UserSdio);
    $UserSdio6=urlencode($UserSdio);
    $UserSdio7=htmlentities($UserSdio, ENT_QUOTES);
    $UserSdio8=htmlentities($UserSdio, ENT_SUBSTITUTE);
    $UserSdio9=htmlentities($UserSdio, ENT_DISALLOWED);
    $UserSdio10=iconv("UTF-8", "ISO-8859-1//TRANSLIT", $UserSdio);
    $UserSdio11=htmlentities($UserSdio, ENT_XML1);
    $UserSdio12=htmlentities($UserSdio, ENT_HTML5);
    $UserSdio13=htmlentities($UserSdio,ENT_QUOTES, "UTF-8");
    $UserSdio14=html_entity_decode($UserSdio);
    //$UserSdio15=_UTF8ToHTML($UserSdio);
    $UserSdio16=utf8_encode(html_entity_decode($UserSdio));
    $UserSdio17 = html_entity_decode($UserSdio, ENT_COMPAT, 'UTF-8');
    //$UserSdio18= htmlspecialchars_decode($UserSdio,ENT_COMPAT);
    
    
    
    
    /*var_dump(get_html_translation_table(HTML_SPECIALCHARS,ENT_QUOTES));
    var_dump(htmlspecialchars('\'',ENT_QUOTES));*/
    
    
    
    
    $UserSdi= $doc->createElement('UserSdi');
    $UserSdi->appendChild($doc->createTextNode($UserSdio18));  //$UserSdi->appendChild($doc->createTextNode(utf8_decode($UserSdio)));
    $b->appendChild($UserSdi);// Aggiungo Proprietario
    
    
    
    
    $r->appendChild($b);
    
    
    $xmlfile = 'convert.xml';
    $doc->save($xmlfile);
    
    
    
    
    function philsXMLClean($strin) {
        $strout = null;
    
    
        for ($i = 0; $i < strlen($strin); $i++) {
                $ord = ord($strin[$i]);
    
    
                if (($ord > 0 && $ord < 32) || ($ord >= 127)) {
                        $strout .= "&amp;#{$ord};";
                }
                else {
                        switch ($strin[$i]) {
                                case '<':
                                        $strout .= '&lt;';
                                        break;
                                case '>':
                                        $strout .= '&gt;';
                                        break;
                                case '&':
                                        $strout .= '&amp;';
                                        break;
                                case '"':
                                        $strout .= '&quot;';
                                        break;
                                default:
                                        $strout .= $strin[$i];
                        }
                }
        }
    
    
        return $strout;
    }
    
    
    
    
    function decode_entities($text) {
        $text= html_entity_decode($text,ENT_QUOTES,"ISO-8859-1"); #NOTE: UTF-8 does not work!
        $text= preg_replace('/&#(\d+);/me',"chr(\\1)",$text); #decimal notation
        $text= preg_replace('/&#x([a-f0-9]+);/mei',"chr(0x\\1)",$text);  #hex notation
        return $text;
    }
    il risultato è sempre:

    [CODE]
    <?xml version="1.0" encoding="utf-8"?>
    <Users>
    <Users>
    <UserSdi>pippo &amp; pluto</UserSdi>
    </Users>
    </Users>



    [/CODE}]

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    11,782
    Stando alle specifiche: https://www.w3.org/TR/REC-xml/#syntax

    i caratteri & e < non possono essere stampati così come sono, ma ne va fatto l'escape, quindi nel file XML saranno sempre presenti nella loro versione "html entity", questo perché possono provocare troncature nel codice XML essendo dei caratteri speciali.

    Almeno fino a qualche tempo fa c'era un bug sulle funzioni php nella gestione di questi caratteri nelle funzioni per la creazione di documenti XML, ora penso sia stato risolto e se non fai tu l'escape lo fa automaticamente PHP.
    Nel codice/file xml non saranno mai presenti nel formato & e <

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.