ellandrd
asked on
XML Parsing Error: xml declaration not at start of external entity
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...
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;
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
I completely rewrote the whole class and now it works fine this time...
thanks for the time and help
Ellandrd
thanks for the time and help
Ellandrd
ASKER
Open in new window