Removing wierd characters in xml output

I am trying to remove strange characters in the xml output. Here's the code and output:

There seems to be encoding issues. I tried to add and convert this from ical to xml:

http://flourishhosting.co.uk/test.php

    <xml version="1.0" encoding="UTF-8">
            <html xsl:version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            <body style="font-family:Arial;font-size:12pt;background-color:#EEEEEE">
            <xsl:for-each select="VCALENDAR">
              <div style="background-color:teal;color:white;padding:4px">
                <span style="font-weight:bold"><xsl:value-of select="URL"/> - </span>
                <xsl:value-of select="DTSTART"/>
                </div>
              <div style="margin-left:20px;margin-bottom:1em;font-size:10pt">
                <p>
                <xsl:value-of select="SUMMARY"/>
                <span style="font-style:italic"> (<xsl:value-of select="calories"/> calories per serving)</span>
                </p>
              </div>
            </xsl:for-each>
            <?php

            function iCalendarToXML($icalendarData) {

                // Detecting line endings
                if (strpos($icalendarData,"\r\n")) $lb = "\r\n";
                elseif (strpos($icalendarData,"\n")) $lb = "\n";
                else $lb = "\r\n";

                // Splitting up items per line
                $lines = explode($lb,$icalendarData);

                // Properties can be folded over 2 lines. In this case the second
                // line will be preceeded by a space or tab.
                $lines2 = array();
                foreach($lines as $line) {

                    if ($line[0]==" " || $line[0]=="\t") {
                        $lines2[count($lines2)-1].=substr($line,1);
                        continue;
                    }

                    $lines2[]=$line;

                }

                $xml = '<?xml version="1.0"?>' . "\n";

                $spaces = 0;
                foreach($lines2 as $line) {

                    $matches = array();
                    // This matches PROPERTYNAME;ATTRIBUTES:VALUE
                    if (preg_match('/^([^:^;]*)(?:;([^:]*))?:(.*)$/',$line,$matches)) {
                        $propertyName = strtoupper($matches[1]);
                        $attributes = $matches[2];
                        $value = $matches[3];

                        // If the line was in the format BEGIN:COMPONENT or END:COMPONENT, we need to special case it.
                        if ($propertyName == 'BEGIN') {
                            $xml.=str_repeat(" ",$spaces);
                            $xml.='<' . strtoupper($value) . ">\n";
                            $spaces+=2;
                            continue;
                        } elseif ($propertyName == 'END') {
                            $spaces-=2;
                            $xml.=str_repeat(" ",$spaces);
                            $xml.='</' . strtoupper($value) . ">\n";
                            continue;
                        }

                        $xml.=str_repeat(" ",$spaces);
                        $xml.='<' . $propertyName;
                        if ($attributes) {
                            // There can be multiple attributes
                            $attributes = explode(';',$attributes);
                            foreach($attributes as $att) {

                                list($attName,$attValue) = explode('=',$att,2);
                                $xml.=' ' . $attName . '="' . htmlspecialchars($attValue) . '"';

                            }
                        }

                        $xml.='>'. htmlspecialchars($value) . '</' . $propertyName . ">\n";

                    }

                }

                return $xml;

            }
            // read in the artist from the form
            $a = urlencode($_GET["VEVENT"]);
            $var = htmlentities($var,ENT_QUOTES, "Windows-1252");
            $connection = curl_init();


            // Specify the URL to connect to
            curl_setopt($connection, CURLOPT_URL, "http://mosaic-church.onthecity.org/plaza/events/ical_feed");


            // This option ensures that the HTTP response is *returned* from curl_exec(),
            // (see below) rather than being output to screen.  
            curl_setopt($connection,CURLOPT_RETURNTRANSFER,1);

            // Do not include the HTTP header in the response.
            curl_setopt($connection,CURLOPT_HEADER, 0);

            // Actually connect to the remote URL. The response is 
            // returned from curl_exec() and placed in $response.
            $response = curl_exec($connection);

            $xml_output = iCalendarToXML($response);
            echo "XML Output <pre>".$xml_output."</pre>";

            // Close the connection.
            curl_close($connection);

            //parse code:
            $xml = simplexml_load_string($xml_output);
            for($index=0; $index < count($xml->VEVENT); $index++)
            {
              echo $xml->VEVENT[$index]-> SUMMARY . "<br />";
              echo $xml->VEVENT[$index]-> DESCRIPTION . "<br />";
            }
            ?>
            </body>
            </html>

      

-1


source to share


1 answer


Your HTML document is incomplete. You are missing the whole tag head

that the content type meta tag should have, which specifies the content and encoding. Now the browser has to guess what the encoding is and guess wrong.

A valid HTML document has a tag head

with a tag title

where you add the meta tag:



<head>
  <title>Page name</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>

      

+1


source







All Articles