How to skip invalid characters in XML file using PHP
php, utf-8, xml
Solution
Do you have control over the XML? If so, ensure the data is enclosed in `<![CDATA[` .. `]]>` blocks.
And you also need to clear the invalid characters:
/**
* Removes invalid XML
*
* @access public
* @param string $value
* @return string
*/
function stripInvalidXml($value)
{
$ret = "";
$current;
if (empty($value))
{
return $ret;
}
$length = strlen($value);
for ($i=0; $i < $length; $i++)
{
$current = ord($value[$i]);
if (($current == 0x9) ||
($current == 0xA) ||
($current == 0xD) ||
(($current >= 0x20) && ($current <= 0xD7FF)) ||
(($current >= 0xE000) && ($current <= 0xFFFD)) ||
(($current >= 0x10000) && ($current <= 0x10FFFF)))
{
$ret .= chr($current);
}
else
{
$ret .= " ";
}
}
return $ret;
}
Problem
I'm trying to parse an XML file using PHP, but I get an error message: parser error : Char 0x0 out of allowed range in I think it's because of the content of the XML, I think there is a speical symbol "☆", any ideas what I can do to fix it? I also get: parser error : Premature end of data in tag item line What might be causing that error? I'm using `simplexml_load_file`. Update: I try to find the error line and paste its content as single xml file and it can work!! so I still cannot figure out what makes xml file parse fails. PS it's a huge xml file over 100M, will it makes parse error?