消除php / xml

时间:2016-08-02 08:42:28

标签: php xml

我对这个话题不太了解。我有一个每天都有的饲料。它一直运行好几个月直到昨天,它抛出错误(在输出xml文档中):

<b>Warning</b>:  simplexml_load_string(): Entity: line 93191: parser error : Entity 'frasl' not defined in <b> folderpath

<b>Warning</b>:  simplexml_load_string():           &lt;g:color&gt;Gold &amp;frasl; White&lt;/g:color&gt; in 

看了一下饲料文件中有一个&frasl;(这是什么导致了我认为的所有问题,这是我第一次在使用哪个饲料的源文档中看到它)组件哪个只是一个正斜杠/。我在网上看了一下这个问题,这是我认为合适的answer

我现在的代码是:

function sxe($feed)
{   
$feed = file_get_contents($feed);
foreach ($http_response_header as $header)
{   
    if (preg_match("&frasl;", $header, $m))
    {   
        switch (strtolower($m[1]))
        {   
            case 'utf-8':
                // do nothing
                break;

            case 'iso-8859-1':
                $feed = utf8_encode($feed);
                break;

            default:
                $feed = iconv($m[1], 'utf-8', $feed);
        }
        break;
    }
}

return simplexml_load_string($feed);

}

我改变了一点以满足我的需要。这会输出xml中的错误:

1)它将角色<换成&lt,将>换成&gt,将"换成&quot

2)错误是:

Undefined variable: http_response_header in <b> folderpath

Invalid argument supplied for foreach() in <b> folderpath

任何人都知道我可以做些什么来解决这个问题?

1 个答案:

答案 0 :(得分:1)

在您对其进行编辑后,您尝试过的修补程序没有任何意义:

if (preg_match("&frasl;", $header, $m))
{   
    switch (strtolower($m[1]))
    {   
        case 'utf-8':
            // do nothing
            break;

        case 'iso-8859-1':
            $feed = utf8_encode($feed);
            break;

        default:
            $feed = iconv($m[1], 'utf-8', $feed);
    }
    break;
}

由于:

  • preg_match的第一个参数必须是正则表达式,而&frasl;不是 - 这会产生警告而不会为$m赋值。它将是null;
  • 文件头不太可能包含字符串&frasl;
  • 您无法通过utf-8iso-8859-1以这种方式获得匹配,因此将始终应用默认大小写,从而破坏$feed的格式。

如果您保留preg_match参数,那么您复制的代码才有意义。

真正的问题似乎是XML文档的内容具有&frasl;,解析器无法识别它。您可以将其替换为its equivalent &#8260;

代码:

$feed = str_replace('&frasl;', '&#8260;', $feed);