Solved

XML Parsing Error: xml declaration not at start of external entity

Posted on 2007-11-22
3
15,453 Views
Last Modified: 2008-02-01
im building my own trackback class for my personal blog.

when i try calling my trackback URL like this: http://localhost/my-blog/this-is-a-test-entry/trackback/  i get the following error:

XML Parsing Error: xml declaration not at start of external entity
Location: http://localhost/my-blog/this-is-a-test-entry/trackback/
Line Number 1, Column 2: <?xml version="1.0" encoding="UTF-8"?>
-^

when i look at the source code, i dont have any whitespaces.  i have checked every line of my code over and over again incase i missed one hiding...

i searched on the web and read that a 8-bit character can be inserted infront of the XML declaration tag but i dont know how it could have?

if i create another example like below it works fine...

<?php
function test()
{
      $xmlWrite = '';
      $xmlWrite .= "<?xml version=\"1.0\" encoding=\"utf-8\" ?>";
      $xmlWrite .= "<test>";
      $xmlWrite .= "<success>works fine...</success>";
      $xmlWrite .= "</test>";
      
      return $xmlWrite;
}

header("Content-type: text/xml");
echo test();
?>

please see my original code below.  I know most of this is PHP so ive included this question in the PHP zone too...
trackback.php - the page that is called when user requests http://domain.com/my-blog/some-blog-entry/trackback/ :
 

<?php

header("Content-type: text/xml");
 

$host = trim($_SERVER['HTTP_HOST']);
 

if(substr($host,0,4) == 'www.')

{	

	$host = substr($host,4);

}
 

$now = date('Y-m-d G:i:s');

$ip = trim($_SERVER['REMOTE_ADDR']);

$agent = trim($_SERVER['HTTP_USER_AGENT']);

$domain = 'http://www.'.trim($host).'/';
 

require_once('classes/class.trackback.php');
 

$trackback = new Trackback('','','UTF-8');
 

global $response, $comment;
 

$tb_id = trim($HTTP_GET_VARS['id']);

$tb_title = trim($HTTP_POST_VARS['title']);

$tb_blog_name = trim($HTTP_POST_VARS['blog_name']);

$tb_url = trim($HTTP_POST_VARS['url']);

$tb_content = substr($HTTP_POST_VARS['excerpt'],0,2000);

$permalink = $domain;
 

if($_SERVER['REQUEST_METHOD'] != 'POST')

{	

	$err_response = 'XML-RPC server accepts POST requests only.';

}
 

// do a few checks to see if trackback is spam or already in table etc etc
 

if($err_response)

{

	echo trim($trackback->recieve(false,$err_response));

}

else

{

	echo trim($trackback->recieve(true,''));

}

?>
 

class.trackback.php recieve function:
 

 function recieve($success = false, $err_response = "") 

 {

        if (!$success && empty($err_response))

		{

            $err_response = "An error occured while tring to log your trackback...";

        }

        

		$return = '<?xml version="1.0" encoding="utf-8"?>'."\n";

        $return .= '<response>'."\n";

        

		if ($success) 

		{

            $return .= '    <error>0</error>'."\n";

        } 

		else 

		{

            $return .= '    <error>1</error>'."\n";

            $return .= '    <message>'.$this->xml_safe($err_response).'</message>'."\n";

        }

		

        $return .= '</response>';
 

        return $return;

    }

Open in new window

0
Comment
Question by:ellandrd
  • 2
3 Comments
 
LVL 6

Accepted Solution

by:
nitinsawhney earned 500 total points
ID: 20333673
Hi,

Looks like a header conflict in your code.

Just remove header("Content-type: text/xml"); from your code and it should do the trick.
If it doesn't work then add another "\n" to following line in the function receive
 $return = '<?xml version="1.0" encoding="utf-8"?>'."\n\n";

Cheers!
0
 
LVL 16

Author Comment

by:ellandrd
ID: 20333686
ok after removing the header i dont get the above error,but if i view source i still get that whitespace or 8-bit char shown up...
 <?xml version="1.0" encoding="UTF-8"?>

<response>

    <error>1</error>

    <message>You didnt post an id to apply the trackback to...</message>

</response>

Open in new window

0
 
LVL 16

Author Comment

by:ellandrd
ID: 20335875
I completely rewrote the whole class and now it works fine this time...

thanks for the time and help

Ellandrd
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

I imagine that there are some, like me, who require a way of getting currency exchange rates for implementation in web project from time to time, so I thought I would share a solution that I have developed for this purpose. It turns out that Yaho…
The Confluence of Individual Knowledge and the Collective Intelligence At this writing (summer 2013) the term API (http://dictionary.reference.com/browse/API?s=t) has made its way into the popular lexicon of the English language.  A few years ago, …
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

943 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now