Как пропустить недопустимые символы в XML файл с помощью PHP

Я пытаюсь проанализировать файл XML с помощью PHP, но я получаю сообщение об ошибке:

ошибка синтаксического анализатора: Char 0x0 из допустимый диапазон в

Я думаю, что это из-за содержания XML, я думаю, что есть специальный символ «☆», какие-нибудь идеи, что я могу сделать, чтобы это исправить?

Я также получаю:

ошибка парсера : Преждевременный конец данных в строке элемента тега

Что может быть причиной этой ошибки?

Я использую simplexml_load_file .

Обновление:

Я пытаюсь найти строку ошибки и вставьте его содержимое как один XML-файл, и он может работать! поэтому я до сих пор не могу понять, что делает сбой анализа XML-файла. PS это огромный XML-файл размером более 100M, произойдет ли ошибка синтаксического анализа?

22
задан Bill the Lizard 12 August 2010 в 12:11
поделиться

3 ответа

У вас есть контроль над XML? Если это так, убедитесь, что данные заключены в блоки .. ]]> .

И вам также необходимо удалить недопустимые символы:

/**
 * 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;
}
34
ответ дан 29 November 2019 в 04:17
поделиться

Если у вас есть контроль над данными, убедитесь, что они закодированы правильно (то есть в кодировке, которую вы обещали в теге xml, например, если у вас есть:

<?xml version="1.0" encoding="UTF-8"?>

, то вы необходимо убедиться, что ваши данные находятся в кодировке UTF-8.

Если у вас нет контроля над данными, кричите на тех, кто владеет им.

Вы можете использовать такой инструмент, как xmllint , чтобы проверить, какой часть (и) данных недействительна.

2
ответ дан 29 November 2019 в 04:17
поделиться

Убедитесь, что ваш источник XML действителен. См. http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

0
ответ дан 29 November 2019 в 04:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: